在单独的线程上加载屏幕

时间:2016-06-24 17:30:45

标签: c# wpf multithreading

所以,我一直在寻求Stack的解决方案,并且有很多关于线程的问题,但是我没有找到一个真正符合我的确切场景的问题。我在主窗口LoadingWindow中有一个WPF窗口BusyBool和一个布尔值。在整个主应用程序中有几个实例,我知道加载数据需要一分钟,所以在开始时我将BusyBool设置为True,当进程完成时,我将BusyBool设置为false 。目标是当BusyBool为True时,加载窗口显示在单独的线程上,当设置为false时,它关闭(冲洗并重复)。

我认为应该工作的是创建一个线程,启动它,然后从主UI线程调用Window.Show()和Window.Close(),而不必一遍又一遍地销毁和重新创建线程。我真的可以使用帮助让实现工作。这是我现在的代码:

   public MainWindow()
    {
        Uri iconuri = new Uri("Assets/logo.jpg", UriKind.Relative);

        InitializeComponent();
        this.DataContext = new MainViewModel();
    }

    public Boolean BusyBool
    {
        get { return _busybool; }
        set
        {
            if (_busybool != value)
            {
                _busybool = value;

                if(value == true)
                {
                    FireThread();
                }
            }
        }
    }

    private void FireThread()
    {
        MainWindow main = App.Current.MainWindow as MainWindow;
        LoadingScreen load = new LoadingScreen(main);

        newWindowThread = new Thread(() => load.Show());
        newWindowThread.SetApartmentState(ApartmentState.STA);
        newWindowThread.IsBackground = true;
        newWindowThread.Start();
    }
}

我已经到了加载窗口中有代码的位置,通过将主窗口的实例传递给它来定期检查BusyBool的值。可能不是最好的实现。

0 个答案:

没有答案