2012-06-28 32 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