Subthread中的ProgressBar

时间:2013-10-16 15:33:28

标签: c# wpf multithreading

我需要编写一个只包含进度条和取消按钮的WPF程序集。这个gui必须在子线程中运行,因此不会阻止调用程序集的程序(发送进度值和检查取消状态)。我知道如何通过Backgroundworker以另一种方式执行此操作,但不知道如何在子线程中运行gui并在两个线程之间进行通信。任何帮助表示赞赏。

启动gui线程的类:

public ProgressBar()
{
    StartProgressWindowThread(0);    
}

private void StartProgressWindowThread(int numberProgressBars)
{
    progressThread = new Thread(new ParameterizedThreadStart(ThreadStartPoint)); 
    progressThread.IsBackground = true;
    progressThread.SetApartmentState(ApartmentState.STA);
    progressThread.Start(numberProgressBars);
}

private void ThreadStartPoint(object args)
{
    progressBarWindow = new ProgressBarWindow(args);
    progressBarWindow.OnCancel += new EventHandler(CancelAction);
    progressBarWindow.Show();
    System.Windows.Threading.Dispatcher.Run();
}

更新: 目前我通过NamedPipes从调用类发送消息到gui线程,然后调用发送的值。 gui上的取消按钮通过代表连接。这很好用,但我不确定NamedPipes是否是正确的选择。

1 个答案:

答案 0 :(得分:0)

您可以使用Invoke:

Invoke(new Action<object>((args) =>
{
    // update gui from a different thread

}), e.Argument);