2012-11-23 186 views
7

我有一個C#Windows窗體應用程序與進度欄。我想根據某些方法狀態動態地進行處理。我在一個單獨的類中擁有該方法,並且爲該方法創建一個新線程,並使用委託將該方法的狀態傳遞給父線程。調度程序不在C#窗體窗體應用程序

我可以在WPF應用程序中使用progressbar.Dispatcher解決這個問題,但在Windows Forms應用程序中沒有Dispatcher,即使我使用System.Threading命名空間。

progressbar.Dispatcher似乎只能在WPF應用程序中使用。

回答

11

在winforms中,可以使用ProgressBar.Invoke或ProgressBar.BeginInvoke從另一個線程更新控件。

5

在Windows Form應用程序BackgroundWorker應完美適合您的任務。特別是,它有ReportProgress方法發送取決於您的計算進度和ProgressChanged跟蹤UI線程的變化。有關全部細節,請參見MSDN article

4

在WinForms中,Invoke/BeginInvoke方法直接位於控制對象上,您可以從System.Windows.Forms.Control的文檔中看到。所以你會有例如progressBar.BeginInvoke(...)

+1

's/WPF/Windows Forms /' – shambulator

+0

@shambulator:謝謝。 – Tudor