日期:2014-05-18  浏览次数:20670 次

Thread.join()的引申问题
join的意思我理解了,就是堵塞当前主进程去执行新进程。但是我现在有个疑问,我启动两个线程就是防止程序假死在那里的,开个新线程去读取设备,但是有可能这个设备根本没有连接,也就是说新线程会卡在那,那是不是我的程序又假死了?

不知道大家能不能看懂。

------解决方案--------------------
线程不会阻塞主线程
------解决方案--------------------
那你就不能在UI线程下Join。
------解决方案--------------------
主线程也会阻塞?
catch?

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

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

那么增加东西的时候就可以对窗体进行操作。
------解决方案--------------------
探讨

那你就不能在UI线程下Join。

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

只要UI等子线程完成,就一定会挂死。