我在WPF应用程序中使用了一个线程和一个Dispatcher事件。在这里我使用ShowDialog()方法打开新窗口mywindow。我想在mywindow对话框关闭后才在“continuewith”事件中执行loadData()方法。我怎样才能做到这一点?现在,LoadData方法在关闭mywindow对话框之前执行。
Thread thread = new Thread(() =>
{
Application.Current.Dispatcher.BeginInvoke( new Action( () =>
{
Window mywindow = new Window();
mywindow.ShowDialog();
} ) );
}.ContinueWith( ( test ) =>
{
LoadData();
} ) );
答案 0 :(得分:2)
您正在使用BeginInvoke在UI调度程序上执行asynchronous call
,因此即使在等待显示对话框窗口之前,任务也会完成。
你应该使用Invoke进行synchronous call
,除非对话窗口打开,否则不会让任务完成。
Application.Current.Dispatcher.Invoke(new Action(() =>
{
Window mywindow = new Window();
mywindow.ShowDialog();
}
在旁注中,我认为您错误地粘贴了Thread
,而应该是Task
。
Task thread =Task.Factory.StartNew(() =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
SecondaryWindow mywindow = new SecondaryWindow(new VM());
mywindow.ShowDialog();
}));
}).ContinueWith((test) =>
{
LoadData();
});
答案 1 :(得分:0)
您应该使用Invoke使用同步调用而不是异步调用。这将是调用LoadData方法。