我知道有關於這個主題的幾個主題,但我認爲我是不同的。 在我的應用程序中,我打開一個表單,用戶可以輸入一些參數進行upcomming打印。這種打印應該在後臺工作人員中運行。因此,我通過事件「OnFormClosing」來觸發該後臺工作人員。Control.Invoke()stucks
在後臺工作人員我需要訪問GUI並更改/閱讀它,所以我需要一個control.Invoke()。 「有時」Invoke一直停留在invoke調用本身,並且不執行委託。我的主線程工作正常,沒有被阻止。我仍然可以與其他的東西進行交互。張貼任何代碼之前:是否有被佈置 的任何其他條件,用於執行control.Invoke()比
- 其他主GUI線程沒有被阻塞
- 的contorl必須存在,創建,而不是在手柄
主線程不需要是免費的,調用被稱爲正確的?它應該繼續一旦主線程空閒...
感謝所有幫助
更新:
這裏是一個問題在線程的情況: 主線程執行此:
Application.Run(appContext);
所以它是空閒的。 工作者線程正在等待在這一行:
fileName = (string)cbPrintFile.Invoke(new Func<String>(() => cbPrintFile.Text));
其中不執行像I狀態的上方。 cbPrintFile
是組合框
您應該使用ReportProgress事件處理程序等向UI線程報告。請參閱http://stackoverflow.com/questions/3289920/c-sharp-how-to-report-progress-from-within-a-class-to-a-backgroundworker。 – MoonKnight 2013-03-11 09:01:49
你說你打開一個表單然後用'OnFormClosing'方法觸發你的後臺工作。你使用'control.Invoke()'更新哪些控件?如果您嘗試更新試圖關閉的表單,這可能是您問題的一部分... – 2013-03-11 09:27:06
+1僅用於標題與'Control.Invoke()很相似'。 – 2013-03-11 11:07:30