我在winform中有一個按鈕,點擊它後會有一些處理,比如說5s。如何使用事件和委託更新UI的進度
在這個過程中,我想更新進度(ProgressBar)到UI,完成工作的百分比。
如何使用事件執行此操作&代表?
其他方法也受到了歡迎(比活動&代表等)..
我在winform中有一個按鈕,點擊它後會有一些處理,比如說5s。如何使用事件和委託更新UI的進度
在這個過程中,我想更新進度(ProgressBar)到UI,完成工作的百分比。
如何使用事件執行此操作&代表?
其他方法也受到了歡迎(比活動&代表等)..
僞下面的代碼。我手頭沒有編譯器,因此實際的ProgressBar界面可能與我記憶中的略有不同。
// service
delegate void ProgressDelegate(int CurrentValue, int MaxValue);
void BusinessProcess(ProgressDelegate progress)
{
// do something
progress(20, 100);
// do other things
progress(50, 100);
// do yet another thing
progress(100, 100);
}
// client
void Button1_Click(object sender, EventArgs e)
{
BusinessProcess(
(current, max) =>
{
this.ProgressBar1.Maximum = max;
this.ProgressBar1.Value = current;
this.ProgressBar1.Refresh();
}
);
}
這解決了關於進度條的直接問題,但它沒有解決如何在ButtonClick上執行5秒的處理。這個程序將'掛起'。 –
如果您添加'Application.DoEvents()'或其他任何東西來強制處理待處理消息,則不會這樣。這就是爲什麼我表示這是一個部分解決方案。 –
DoEvents()引入了一堆(潛在的)其他問題。它需要一個線程。 –
如果您希望在此過程中保持應用程序響應,請使用BackgroundWorker。請參閱MSDN文章BackgroundWorker Class。它有一個c#示例,顯示如何報告進度。
你做了什麼研究?有關此主題的示例代碼,MSDN上有一些頁面。 – ChrisF
@ChrisF:我知道如何使用事件和委託理論..但在這種情況下,我不知道如何實現它..而且我甚至不知道如何做這個特定的場景的任何研究。 – dotNETbeginner
這很好,但除非你說出你試過的東西,否則答案可能會比沒有答案更糟糕。 – ChrisF