[英]background worker window controls not rendered
有什么方法可以在不使用showdialog()的情況下在后台工作線程中加載窗口? 后台工作程序僅在從窗口獲得一些輸入后才終止。 這里的問題是顯示了窗口,但即使我們沒有任何窗口的控制權,也無法呈現按鈕和其他控件。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// acquire form
Acquire aq = new Acquire(Handle);
aq.Show();
do
{
// waiting for image
} while (!aq.isImageReady);
// doing Image operation
}
您可以在啟動后台工作程序之前顯示該對話框,並聲明一個volatile變量,您可以在后台工作程序中進行更改/簽入並使其繼續運行,直到它具有所需的值為止,該值將在對話框關閉后實現。
問題可能是因為您使用后台線程顯示窗口而不是進程的主UI線程。 如果未在正確的線程上使用Winform控件,則拋出異常或行為不正確。 在這種情況下,問題可能是主窗口正在主UI線程上運行,而此附加對話框窗口正在創建並由其他線程顯示。
嘗試從后台線程引發事件,以使UI知道它需要用戶輸入。 然后,UI可以處理顯示對話框並通過將數據傳遞回后台線程來響應用戶的輸入。
為了防止后台線程繼續進行下去,請創建一個System.Threading.AutoResetEvent對象(一個WaitHandle),並在引發事件后立即在該對象上調用WaitOne方法,以通知UI顯示對話框。 當UI通過將數據傳遞回后台線程來響應用戶輸入時,該代碼可以調用AutoResetEvent對象上的Set方法,以允許后台線程繼續進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.