2011-12-10 32 views
0

我在winform中有一個按鈕,點擊它後會有一些處理,比如說5s。如何使用事件和委託更新UI的進度

在這個過程中,我想更新進度(ProgressBar)到UI,完成工作的百分比。

如何使用事件執行此操作&代表?

其他方法也受到了歡迎(比活動&代表等)..

+0

你做了什麼研究?有關此主題的示例代碼,MSDN上有一些頁面。 – ChrisF

+0

@ChrisF:我知道如何使用事件和委託理論..但在這種情況下,我不知道如何實現它..而且我甚至不知道如何做這個特定的場景的任何研究。 – dotNETbeginner

+1

這很好,但除非你說出你試過的東西,否則答案可能會比沒有答案更糟糕。 – ChrisF

回答

1

僞下面的代碼。我手頭沒有編譯器,因此實際的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(); 
     } 
    ); 
} 
+0

這解決了關於進度條的直接問題,但它沒有解決如何在ButtonClick上執行5秒的處理。這個程序將'掛起'。 –

+0

如果您添加'Application.DoEvents()'或其他任何東西來強制處理待處理消息,則不會這樣。這就是爲什麼我表示這是一個部分解決方案。 –

+0

DoEvents()引入了一堆(潛在的)其他問題。它需要一個線程。 –

5

如果您希望在此過程中保持應用程序響應,請使用BackgroundWorker。請參閱MSDN文章BackgroundWorker Class。它有一個c#示例,顯示如何報告進度。