在撰写一个按钮处理数据同步的事件时,处理前先弹出一个窗口,告知用户正在处理数据,处理数据后再关闭这个弹窗。
Button按钮的事件代码原先是这样,预想中是处理一些事情后,可以自动关闭弹窗。DialogHost_MySelf就是DialogHost。
1 this.DialogHost_MySelf.IsOpen = true; 2 /** 3 处理一些事情 4 */ 5 this.DialogHost_MySelf.IsOpen = false;
但在实际运行中发现,并没有按照预想的那样先弹出后关闭,而是直接不弹窗了。
后来在官方文档中发现有这么一句话,这句话的意思是对话框是异步的,您不得不在代码中去处理它。
也就是说,在之前的代码中,设置IsOpen为true后,并没有立即执行,而是在等待这个按钮事件完成。结果又碰到了设置IsOpen为false的代码,导致最后也不弹窗。
正确代码执行方式如同下图所示,使用Task+Dispatcher.Invoke来实现异步延时关闭弹窗
1 this.DialogHost_MySelf.IsOpen = true; 2 3 Task.Run(async () => 4 { 5 /** 6 await 处理一些事情 7 */ 8 Dispatcher.Invoke(() => 9 { 10 this.DialogHost_MySelf.IsOpen = false; 11 }); 12 });
标签:异步,MySelf,IsOpen,Material,DialogHost,Design,关闭,弹窗 From: https://www.cnblogs.com/lixiaoyutian/p/17375668.html