所以,我一直在寻求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的值。可能不是最好的实现。