當打開第二個表格 的方法/函數在另一個線程上時,是否可以打開我的第二個表單?用另一個線程上的方法/函數打開另一個表單?
我已閱讀有關這個.. 其他線程,但它似乎我無法弄清楚如何使用調用
這裏就是我打開第二個形式 當IM調用這個..沒有正好..(因爲它的第二個線程)
TimerMode f2 = new TimerMode();
f2.ShowDialog();
請幫助我。我新手多-threading ..
當打開第二個表格 的方法/函數在另一個線程上時,是否可以打開我的第二個表單?用另一個線程上的方法/函數打開另一個表單?
我已閱讀有關這個.. 其他線程,但它似乎我無法弄清楚如何使用調用
這裏就是我打開第二個形式 當IM調用這個..沒有正好..(因爲它的第二個線程)
TimerMode f2 = new TimerMode();
f2.ShowDialog();
請幫助我。我新手多-threading ..
它應該做點什麼。這是因爲ShowDialog
將運行自己的消息循環。 TimerMode
窗體至少應該可見並且正常工作。但是,你是對的,這真的不是最好的做法,尤其是如果這個表單將與已經在主UI線程上運行的其他表單交互。
這裏是你如何做到這一點。
anotherForm.Invoke(
(MethodInvoker)(() =>
{
new TimerMode().ShowDialog();
}));
注意anotherForm
是這已經是託管在主UI線程上的其他形式的一個參考。
你需要在主窗口線程 上執行嘗試以下操作:
this.Invoke((MethodInvoker)delegate{
TimerMode f2 = new TimerMode();
f2.ShowDialog();
}
這將正確的線程上創建它。
嗨,Brian,感謝您給出的示例代碼。它的作品像一個魅力,但我仍然有一個問題,我認爲這仍然與此線程相關..如果我使用.ShowDialog()它以某種方式停留在那裏..下面的代碼不執行..如果我使用.Show()現在讀取以下代碼集合,但TimerMode For看起來像是處於Not-Responding狀態(如在應用程序掛起時在Windows XP中)。這是我發現的。再次感謝您的回答。 – Katherina 2011-05-11 17:06:07
也只是爲了添加,如果TimerMode現在顯示..我無法可見= false的第一種形式。它沒有任何反應。 =( – Katherina 2011-05-11 17:11:02
)你將不得不發佈更多的代碼,沒有看到更大的圖片,我只能推測 – 2011-05-11 18:07:04