C_Sharp 板


LINE

请问一下以下两种写法为何第一种在运行时视窗不能拖动,第二种视窗可以拖动。 private void button2_Click(object sender, EventArgs e) { new Thread(Test).Start(); } 1.视窗会被卡死 public void Test() { if (textBox1.InvokeRequired) { Action obj = new Action(Test); textBox1.Invoke(obj); return; } for (int x = 0; x < 100000; x++) { textBox1.Text = x.ToString(); } } 2.视窗不会被卡死 public void Test() { for (int x = 0; x < 100000; x++) { textBox1.Invoke(new Action(() => {textBox1.Text = x.ToString();})); } } 另外还有几个观念想请问一下,C#的Message loop会不会因为父Thread忙碌造成子Thread 也卡住? 还是每一个Thread都有自己的message loop,没有父子的阶层关系? ------ | | | 父 | while(true){} // if busy |----| ------- | | | 子1 | Textbox更新 // 卡住不会动 |-----| // 是因为Textbox的拥有者是父Thread,所以更新要透过父 // Thread,但是它正在buzy,所以子Thread也卡住吗? ------- | | | 子2 | 基本的数学运算 // 正常运行 |-----| // 是因为没有需要透过父Thread处理的工作吗? 不好意思问题有点多,如果有C#处理UI的相关资料希望也可以推荐一下,谢谢! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.43.228.187
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1454089130.A.92B.html
1F:推 tvbic: 第一种写法 就跟没有用thread的效果一样 当然会卡了 01/30 02:26
2F:→ ssccg: 第一个是invoke一个长时间动作(loop)在ui thread 01/30 05:39
3F:→ ssccg: 第二个是在新thread跑loop,每次loop invoke一个短时间动作 01/30 05:40
4F:→ ssccg: 至於invoke动作在另一个thread上会不会卡住原本thread是看 01/30 05:43
5F:→ ssccg: invoke方法,用Invoke会等,用BeginInvoke就不等 01/30 05:44
6F:→ ssccg: 跟父子没有关系,thread没有父子关系 01/30 05:44
意思是说其实第二种写法等效於下面的Code吗? public void Test() { for (int x = 0; x < 10000; x++) { ShowText(x); } } public void ShowText(int x) { if (textBox1.InvokeRequired) { Action<int> obj = new Action<int>(ShowText); this.Invoke(obj,x); return; } textBox1.Text = x.ToString(); } 另外关於子Thread会不会被父Thread卡住的问题(使用invoke的方式),是不是应该说成 需要更新的控件的拥有线程是否堵塞比较好? 如果是这样,那麽要如何判断控件的拥有线程是哪一个? 例如这样: void Create() // 主线程呼叫 { Form2 frm = new Form2(); new Thread( ()=>{frm.ShowDialog();} ).Start(); // 支线程 } 此时的frm上的控件拥有者算是主线程还是支线程? 如果此时主线程执行while(true){},进入讯息堵塞的状态, 而frm的视窗是可以正常拖动的,所以拥有frm的是支线程而不是主线程? 但是frm不是在主线程被建构的吗? ※ 编辑: sd016808 (114.43.228.187), 01/30/2016 11:12:47
7F:→ sd016808: 关於最後的问题,是不是因为控件是在ShowDialog()後才被 01/30 11:16
8F:→ sd016808: 建立的,所以控件的所有权是属於支线程的,所以就算主线 01/30 11:17
9F:→ sd016808: 程讯息被堵塞,frm视窗不会受到影响。 01/30 11:18
10F:推 fanntone: http://tinyurl.com/goho4n9 02/02 22:17
11F:→ fanntone: 关键字: 同步 非同步 02/02 22:17







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP