我需要编写一个只有进度条和取消按钮的 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 是否是正确的选择。