【问题标题】:WPF open new window on another threadWPF 在另一个线程上打开新窗口
【发布时间】:2016-02-09 13:29:34
【问题描述】:

在下面的代码中,我调用了打开自定义新窗口的方法。但是,当应用程序正在执行一些长时间运行的任务时,我希望仍然能够激活窗口。是否可以在另一个线程上或使用Task 类来执行此操作?

public static class CustomW
{
    static Custom_Window_Chrome_Demo.ThemedWindow MsgBox(string Msgbx_TTL, string Msgbx_Contnt)
    {
        var w_mbx = new Custom_Window_Chrome_Demo.ThemedWindow();
        w_mbx.Width = 950; w_mbx.Height = 159;
        w_mbx.Title = Msgbx_TTL;

        Grid g = new Grid();
        StackPanel spM = new StackPanel();
        TextBlock TblckErrMsg = new TextBlock();
       //more settings......
    } 
}

这就是我尝试调用它的方式,

public void newMsgBoxShow(string Msgbx_TTL, string Msgbx_Contnt)
{
    System.Threading.Thread s = new System.Threading.Thread( 
       ()=>
        CustomW.MsgBox(Msgbx_TTL, Msgbx_Contnt).Show()
       );
}

但是当我使用新线程时,我收到以下错误。

调用线程必须是STA,因为很多UI组件都需要这个

达到所需结果的正确方法是什么?

【问题讨论】:

  • 长时间运行的任务在哪里?
  • 嗯,你应该在另一个线程上运行你的长任务,主线程留给 UI 和非繁重的东西。
  • @NicoSchertler 长任务是搜索数据库长代码..
  • 按照建议,您应该在另一个线程上执行长时间运行的任务,也许使用后台工作人员。解释见这里:codeproject.com/Articles/841751/…
  • @NawedNabiZada 然后我从新线程中尝试相同的结果(调用 CustomW.MsgBox()

标签: c# wpf multithreading


【解决方案1】:

使用这个:

 Task.Factory.StartNew(new Action(() =>
            {
                //your window code
            }), CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());

当使用当前同步上下文创建新线程时,它将能够更新 UI。(当当前线程为 UI 线程时)

您还可以使用调度程序来执行您的代码。

 System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(()=>
            {
                //your window code
            }));

【讨论】:

    【解决方案2】:

    看看 Dispatcher
    https://msdn.microsoft.com/cs-cz/library/system.windows.threading.dispatcher%28v=vs.110%29.aspx

    Dispatcher.CurrentDispatcher.Invoke(delegate { /* CODE */ }, DispatcherPriority.Normal);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多