可以在另一个线程中加载新的wpf窗口以避免冻结当前窗口吗?

时间:2019-11-29 09:09:10

标签: c# wpf multithreading

所以我有一个小问题...当从一个窗口(开始窗口)进入第二个窗口(主窗口)时,第二个窗口很重,需要大约10秒的加载时间,这意味着启动窗口将冻结10秒钟,然后启动第二个窗口并自行关闭。

因此,运行此功能需要10秒钟:BoardTable table = new BoardTable() 而且我想在加载符号/图形的同时实时加载10秒钟,而不冻结整个UI。

*我尝试在另一个线程结果上加载第二个窗口=>静态线程错误...

*使用静态线程加载(在堆栈溢出处的另一处帖子中得到了这个想法)... UI会冻结,或者第二个表根本不会加载。

因此,当UI保持冻结状态时,我对如何实现某种加载符号有点困惑:(

1 个答案:

答案 0 :(得分:1)

我实际上尝试了一种可行的方法,在此共享它,以防将来其他人遇到相同的问题:

StartWindow:

        Thread t = new Thread(new ParameterizedThreadStart(LoadSecondWindow));
    t.SetApartmentState(ApartmentState.STA);
    t.Start(gameMode);

在新线程上:

        private void LoadSecondWindow(object o)
    {
        GameMode gameMode = (GameMode)o;
        Table blackjackTable = new Table(gameMode);
        blackjackTable.Show();
        Dispatcher.Run();
    }

Dispatcher.Run()实际上是解决了所有问题的方法...现在,我们可以在需要的任何时间渲染一些UI加载符号:D