如何从其他类更新进度条?

Why*_*ing 4 .net c# progress-bar

我有一个用c#编写的命令行工具(我有源代码),我在visual studio 2010中制作了一个gui.在gui中我想更新进度条以反映工具操作的进度.我如何从工具内部发出已取得进展的信号并更新进度条?我正在做的一些简化示例代码.

private void doThings_Click(object sender, EventArgs e)
{
  myToolInstance.doWorkThatNeedsToReportProgress();
}
Run Code Online (Sandbox Code Playgroud)

该工具正在完成的工作是一系列函数调用,通常在30左右.我想在每次完成其中一个时更新进度条.

Oli*_*bes 15

在包含进度条的表单中创建公共属性或公共方法

public void SetProgress(int progress)
{
    progressBar.Progress = progress;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用更新进度条

myForm.SetProgress(50);
Run Code Online (Sandbox Code Playgroud)

另一种方法是在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);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在表单中你会有这样的东西

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;
}
Run Code Online (Sandbox Code Playgroud)