簡體   English   中英

C#跨線程對話合作

[英]C# cross thread dialogue co-operation

KI正在研究3.0中主要的單線程Windows窗體應用程序。 最近,我的老板在單獨的線程上添加了進度對話框,因此當主線程離開並執行一些繁重的工作並鎖定GUI時,用戶會看到一些活動。

除非用戶切換應用程序或將進度表放在最前面並且不會隨着主應用程序消失而將其最小化,否則上述方法都可以正常工作。 如果有很多小的操作,這也不錯,因為主窗體的事件結構在有時間時會趕上它的事件,因此可以最小化並檢查活動標志,從而對話框線程可以相應地隱藏或顯示自己。

但是,如果長時間運行的sql操作開始,則不會觸發任何事件。 我已經嘗試攔截WndProc命令,但是當執行長時間運行的sql操作時,它也會出現在隊列中。 我也嘗試過拾起進程,找到當前應用程序並檢查進度線程中的各種內存值isiconic等,但是直到sql操作完成,這些都沒有更新。 刪除最頂部的內容會導致對話框在另一個應用程序激活時消失,但是如果將主應用程序重新帶回,則該對話框不會再次出現。

因此,我需要一種方法來找出其他線程是否已最小化或不再處於活動狀態,而這並不涉及查詢實際線程,因為該線程在sql操作完成之前會鎖定。

現在我知道這不是最好的編寫方法,最好在單獨的線程上進行所有繁重的處理,而使GUI保持空閑,但是由於這是一個龐大的古老應用程序,因此以這種方式重新編寫的時間將沒有提供,所以我必須使用已有的東西。

任何幫助表示贊賞

聽起來好像長時間運行的操作已綁定到進度對話框? 這通常是個壞主意,我想知道進度是否可以顯示出來。
但是,您應該考慮將BackgroundWorker用於長時間運行的操作。 因此,您的GUI(主窗體以及進度對話框仍處於活動狀態)。
這樣,您應該能夠將主窗體的最小化事件發送到進度對話框,該對話框可以立即對其做出反應。

順便說一句。 BackgroundWorker自己支持進度報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM