Wpf 如何在BackgroundWorker中打开任何视图?
在我的桌面应用程序中,我想在BackgroundWorker中打开视图以显示提醒。 但当我试图打开视图时,它会给我以下错误。 “调用线程必须是STA,因为许多UI组件都需要STA。” stackTrace是Wpf 如何在BackgroundWorker中打开任何视图?,wpf,mvvm,backgroundworker,Wpf,Mvvm,Backgroundworker,在我的桌面应用程序中,我想在BackgroundWorker中打开视图以显示提醒。 但当我试图打开视图时,它会给我以下错误。 “调用线程必须是STA,因为许多UI组件都需要STA。” stackTrace是 at System.Windows.Input.InputManager..ctor() at System.Windows.Input.InputManager.GetCurrentInputManagerImpl() at System.Windows.Input.Keyb
at System.Windows.Input.InputManager..ctor()
at System.Windows.Input.InputManager.GetCurrentInputManagerImpl()
at System.Windows.Input.KeyboardNavigation..ctor()
at System.Windows.FrameworkElement.FrameworkServices..ctor()
at System.Windows.FrameworkElement.EnsureFrameworkServices()
at System.Windows.FrameworkElement..ctor()
at System.Windows.Controls.Control..ctor()
at System.Windows.Window..ctor()
at MahApps.Metro.Controls.MetroWindow..ctor()
任何人都能找到解决方案吗?您可以这样做:
private BackgroundWorker _BgWorker;
public Window1()
{
InitializeComponent();
_BgWorker = new BackgroundWorker();
_BgWorker.DoWork += new DoWorkEventHandler(bgw_DoWork);
_BgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
///your code to get the data from database...
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//you code to open a view
}
在Runworker中使用此选项已完成
Thread Messagethread = new Thread(
new ThreadStart(delegate()
{
DispatcherOperation DispacherOP = frmMassenger.Dispatcher
.BeginInvoke(DispatcherPriority.Normal, new Action(
delegate()
{
frmMassenger.Show();
}
));
} ));
Messagethread.Start();
稍后,使用以下方法将线程与主线程连接:
Thread.join(userthread);
希望这能对您有所帮助。它的可能副本只在打开视图一次时有效。因为我使用计时器在20秒后运行后台工作程序,它会给我相同的错误@Krishit在frmMassenger处给我NullReference异常。Dispatcher和我可以创建视图的实例,因为我的主要异常发生。@Krishit在替换后工作frmMassenger.Dispatcher到Dispatcher,我可以按计时器间隔打开视图。谢谢你的帮助