为什么我的代码卡在Form2Thread.Join()上?

时间:2011-01-20 14:13:37

标签: c# .net multithreading visual-studio-2005 windows-ce

从我读到的关于这个.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));

2 个答案:

答案 0 :(得分:1)

该平台没有得到满足。加入等待另一个线程完成。尝试在等待使用join的线程中编写一些跟踪或调试消息。

显示此.Nep450_ThreadLowPower功能。应该有堆叠原因

答案 1 :(得分:0)

在调用Join()之前检查线程的状态是个好习惯:

if (aThread.ThreadState == ThreadState.Running)
{

    aThread.Join();

}

编辑:既然您已发布了代码示例,我认为您应该检查是否确实需要Thread.Sleep(500)调用。

编辑#2:更正了上述代码。