我在C#中的多線程有點困難。從其他線程停止線程
我只需激活線程:
getMultiVarEnabled = true; Globals.readThread = new Thread(readMultipleVarForTextBoxes); Globals.readThread.IsBackground = true; Globals.readThread.Start();
內螺紋:
Globals.PIC.recievingMultiple = true; while (getMultiVarEnabled) // dodaj timeout { ... } Globals.PIC.recievingMultiple = false; Globals.readThread.Abort();
,並停止從主線程的線程使用:
if (getMultiVarEnabled) { getMultiVarEnabled = false; while (Globals.PIC.recievingMultiple); Globals.readThread.Join(); Globals.readThread = null; }
的問題是,有時(並不總是)我的程序停止線:
while (Globals.PIC.recievingMultiple);
有誰知道什麼是使該故障發生的?
最好的問候, 克里斯
有趣的代碼格式,我喜歡它:) – ViRuSTriNiTy
Globals.PIC.recievingMultiple'聲明爲volatile嗎?爲什麼要從它裏面中止readThread?只需在'readMultipleVarForTextBoxes'中使用'return'即可。 – JeffRSon
關於代碼的一些評論。在多線程代碼共享中,狀態是錯誤的主要來源。靜力學不是你認爲他們的朋友。你也不需要放棄自己_Inside thread:_'Globals.readThread.Abort();',理想情況下你不用任何地方的'Abort',只要停止執行代碼即退出循環。 –