2012-06-28 58 views
2

我有一個用c#編寫的命令行工具(我有這個源碼),我正在製作一個GUI在Visual Studio 2010中。在GUI中,我想更新進度條以反映工具操作的進度。我將如何從工具內發出進度信號並更新進度條? 一些簡單的示例代碼,即時消息正在做什麼。如何從其他課程更新進度欄?

private void doThings_Click(object sender, EventArgs e) 
{ 
    myToolInstance.doWorkThatNeedsToReportProgress(); 
} 

正由工具所做的工作是一系列的函數調用,通常約30.我想每一次的飾面一個更新進度條。

+1

你有沒有在命令行工具的源代碼控制?該工具目前是否以任何方式表明進展?怎麼樣? –

+0

進度反映在你想要完成的事情上。您需要找到一個反映當前任務的變量,該變量可以被監控並更新到進度欄。這將有助於你編輯你的文章的具體細節。 – Ari

+0

你可以給我們一些你的代碼,並指出哪一部分需要進度條嗎?另外,你在什麼框架中構建你的GUI(WPF,Winforms?)? – EtherDragon

回答

9

創建一個公共財產或形式包含進度條

public void SetProgress(int progress) 
{ 
    progressBar.Progress = progress; 
} 

現在你可以用

myForm.SetProgress(50); 

另一種方法更新進度條的公共方法是有一個ProgressChanged某處的事件,並讓表單訂閱此事件。

public class Tool { 
    public event Action<int> ProgressChanged; 

    private void OnProgressChanged(int progress) 
    { 
     var eh = ProgressChanged; 
     if (eh != null) { 
      eh(progress); 
     } 
    } 

    public void DoSomething() 
    { 
     ... 
     OnProgressChanged(30); 
     ... 
    } 
} 

在表單中你會像這樣

private Tool _tool; 

public MyForm() // Constructor of your form 
{ 
    _tool = new Tool(); 
    _tool.ProgressChanged += Tool_ProgressChanged; 
} 

private void Tool_ProgressChanged(int progress) 
{ 
    progressBar.Progress = progress; 
} 
+0

問題是進度數據來自外部工具(運行在不同的進程中)。 –

+0

但它的工作原理是因爲我可以(並確實)獲得該工具的源代碼。 – Whyrusleeping