Thread.join()的引申问题

jason19880221 2011-12-14 11:13:25
join的意思我理解了,就是堵塞当前主进程去执行新进程。但是我现在有个疑问,我启动两个线程就是防止程序假死在那里的,开个新线程去读取设备,但是有可能这个设备根本没有连接,也就是说新线程会卡在那,那是不是我的程序又假死了?

不知道大家能不能看懂。
...全文
85 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jason19880221 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fangxinggood 的回复:]

子线程回调就是:让子线程来通知UI是否完成,而不是UI等着子线程。
可以用 Delegate.BeginInvoke,传入callback delegate,
或者用 .net 4.0 ATP 的 async,await直接转化成 Event based Async Pattern

只要UI等子线程完成,就一定会挂死。
[/Quote]
哦,我明白点了
机器人 2011-12-14
  • 打赏
  • 举报
回复
子线程回调就是:让子线程来通知UI是否完成,而不是UI等着子线程。
可以用 Delegate.BeginInvoke,传入callback delegate,
或者用 .net 4.0 ATP 的 async,await直接转化成 Event based Async Pattern

只要UI等子线程完成,就一定会挂死。
jason19880221 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fangxinggood 的回复:]

看你想做什么了。一般就让子线程回调
[/Quote]
子线程回调,是invoke么
jason19880221 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyloveyrf 的回复:]

主线程也会阻塞?
catch?

防止假死可以这样啊
比如:
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = sender as BackgroundWorker;
……
[/Quote]
这个……我看不懂。呵呵
其实我觉得我这个方法也不错,子线程去采集数据,采集回来给主线程,然后主线程继续走
机器人 2011-12-14
  • 打赏
  • 举报
回复
看你想做什么了。一般就让子线程回调
机器人 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gomoku 的回复:]

那你就不能在UI线程下Join。
[/Quote]

UI 线程里join 那两个连接设备的子线程,UI就会卡死...
jason19880221 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gomoku 的回复:]

那你就不能在UI线程下Join。
[/Quote]
那还有其他办法么,难道还要建个线程?
jason19880221 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

线程不会阻塞主线程
[/Quote]
你的意思是说,他们还是同步执行的?
萧炎 2011-12-14
  • 打赏
  • 举报
回复
主线程也会阻塞?
catch?

防止假死可以这样啊
比如:
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = sender as BackgroundWorker;
Execute(backgroundWorker, e);
}

线程启动用
if (!backgroundWorker1.IsBusy)
backgroundWorker1.RunWorkerAsync();

那么增加东西的时候就可以对窗体进行操作。
gomoku 2011-12-14
  • 打赏
  • 举报
回复
那你就不能在UI线程下Join。
bdmh 2011-12-14
  • 打赏
  • 举报
回复
线程不会阻塞主线程

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧