在后台工作的方法中,我有两条重要的线:
createPopup();
MessageBox.Show(sth);
more lines
more lines
createPopup() 只是创建一个弹出窗口,添加一个网格作为子项并显示弹出窗口。我的问题是,为什么首先显示messageBox,然后显示Popup,它出现在此方法中的所有行完成之后?我怎样才能让这个弹出窗口在这个方法中的所有行都完成之前显示?
在后台工作的方法中,我有两条重要的线:
createPopup();
MessageBox.Show(sth);
more lines
more lines
createPopup() 只是创建一个弹出窗口,添加一个网格作为子项并显示弹出窗口。我的问题是,为什么首先显示messageBox,然后显示Popup,它出现在此方法中的所有行完成之后?我怎样才能让这个弹出窗口在这个方法中的所有行都完成之前显示?
所有 UI 更改通常都会排队并立即显示在屏幕上。这不包括 MessageBox。因此它会立即显示并阻止执行,直到用户单击确定。因此,即使您的 popUP 第一次执行,它也只会在 MessageBox 之后显示在 UI 中。
对于您的问题,请尝试将您的 MessageBox.Show(something) 放在单独的线程中。
createPopup();
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show("some message");
});
more lines
more lines
试试看。我不确定它是否能解决您的问题,因为我不知道 createPopUp() 方法中的代码。
创建弹出窗口,直到 Layout 事件才真正在屏幕上绘制它。如果要确保在显示弹出窗口之前已绘制弹出窗口,请将事件处理程序附加到弹出窗口的 LayoutUpdated 事件并从该事件处理程序中显示消息框。确保也分离事件处理程序,否则您将看到多个消息框。
public InitPage()
{
Popup popup = new Popup();
popup.LayoutUpdated += popup_LayoutUpdated;
LayoutRoot.Controls.Add(popup);
}
void popup_LayoutUpdated(object sender, object e)
{
popup_LayoutUpdated -= popup_LayoutUpdated;
MessageBox.Show("hello");
}