【问题标题】:ProgressBar in Subthread子线程中的进度条
【发布时间】:2013-10-21 21:24:10
【问题描述】:

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

【问题讨论】:

  • 为您能够做的事情提供代码,这样我们就不会重新做您迄今为止已经完成的工作,并明确说明您的哪些方面您遇到问题的解决方案。

标签: c# wpf multithreading


【解决方案1】:

您可以使用调用:

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

}), e.Argument);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多