我一直在遺留應用程序上工作一段時間,並且我注意到了一些問題。該系統是一個令人難以置信的複雜的客戶端/服務器與標準和定製框架。傳統應用程序在非用戶界面線程中創建對話框
內置於應用程序中的自定義框架之一涉及驗證工作流操作。它發現潛在的錯誤,將它們分離成警告和錯誤,並將結果傳回客戶端。警告和錯誤的主要區別在於,警告會詢問用戶是否希望忽略錯誤。
我遇到的問題是,此提示符的對話框是在非ui線程上創建的,因此我們在顯示對話框時遇到了交叉線程問題。我試圖調用對話框的顯示,但是由於尚未創建窗口句柄,因此失敗。 (InvokeRequired返回false,在這種情況下,我假設它無法在其父樹中找到像樣的句柄,而不是它不需要它。)
有沒有人有任何建議可以創建此對話框並獲得UI線程來設置並調用它?
這並不在這種情況下工作,正如我上面提到。沒有窗口句柄,你不能調用invoke。 – Frater 2010-03-31 02:37:09
您是否考慮了上述模式並創建了一個自定義EventArgs類,該類將傳遞一個消息或枚舉類型,然後您可以使用該類型在if語句的else部分內創建表單的相應實例。這將避免您在非UI線程上創建表單的問題。您只會傳遞某種類型的指示符或消息,然後從ui線程處理該消息,而不是嘗試從除創建它之外的線程調用表單實例。 – Doug 2010-03-31 05:05:17
這可能值得一試,但它會非常複雜。代碼相當可怕。我會再考慮一下,謝謝。 – Frater 2010-04-23 12:40:43