从我读到的关于这个.Join()的内容来看,它似乎等待有问题的线程在加入并继续使用主代码之前完成其操作。但是,据我所知,当我的代码卡在.Join()上时,线程不再运行并且似乎已经关闭了。在有问题的线程上遇到的最后一行代码是this.Close()。任何想法发生了什么以及如何解决它?
这是在Windows CE手持设备上运行的C#可执行程序。
我还应该补充一点,这是一个不会一直发生的间歇性问题。
这是线程的开始:
//Start the thread to continuously receive while the LP dialog is open
Thread Form2Thread = new Thread(new ThreadStart(this.Nep450_ThreadLowPower));
这是.Join()之前的代码:
else if (Form2.g_IsOKPressed)//This variable is set in the thread in qustionFomr
{
g_bThreadLowPowerTerminate = true;
Thread.Sleep(500);
Form2Thread.Join();
我找到了问题的根源。以下行被点击并在第二次运行代码时导致问题。一旦我删除它就没有问题了。
this.Invoke(new EventHandler(CloseLPDialog));
答案 0 :(得分:1)
该平台没有得到满足。加入等待另一个线程完成。尝试在等待使用join的线程中编写一些跟踪或调试消息。
显示此.Nep450_ThreadLowPower功能。应该有堆叠原因
答案 1 :(得分:0)
在调用Join()之前检查线程的状态是个好习惯:
if (aThread.ThreadState == ThreadState.Running)
{
aThread.Join();
}
编辑:既然您已发布了代码示例,我认为您应该检查是否确实需要Thread.Sleep(500)调用。
编辑#2:更正了上述代码。