2011-03-23 61 views
0

如果我沒有清楚地解釋這些,我很抱歉,但是我正在編寫一個應用程序,它導致我在線程方面出現了一些問題。向父UI線程報告進度

我有一個用於啓動System.Timers.Timer的UI。每次計時器過去時,都會觸發一個打開進度屏幕的工作流程。爲防止在最後一個工作流完成之前啓動另一個工作流,它將鎖定主窗體上的對象。 此進度屏幕啓動並報告使用FileCopyEX進行某些文件複製的進度。

我遇到的問題是進度屏幕直到工作流程完成後才顯示。

希望這將使其更清晰:

主要形式 | Timer Elapses | WorkFlow開始 | 進度屏幕打開(發生的錯誤可追溯到前一個) | 發生文件複製(進度報告回到進度屏幕) 如果沒有錯誤,則在下一次打勾前返回到主屏幕。

直到現在我只實現了非常簡單的線程,所以我不確定如何最好地實現這一點。我已經嘗試在BackGroundWorker上啓動工作流程以將其從UI線程分離,但它的行爲相同。

感謝

+0

你的問題開始於System.Timers.Timer,Elapsed在另一個線程上運行。之後它變得很不清楚。關注BackgroundWorker。 – 2011-03-23 17:23:56

回答

1

我建議你閱讀一下BackgroundWorker。這有助於報告進展情況。

請記住,系統計時器在非UI線程上調用其事件處理程序。每當你使用UI做什麼時,你都必須在UI線程上。

1

沒有代碼,我只能猜測的原因,但可能的原因是進度窗口需要的UI是抽的消息出現 - 即UI線程需要運行。

如果UI線程忙於運行您的工作流程,那麼它將不會處理顯示您的窗口,直到此後。您需要分離流程,以便進度窗口位於UI線程上,而工作流程位於後臺線程上。

希望有道理!