0

在后台工作的方法中,我有两条重要的线:

createPopup();
MessageBox.Show(sth);
more lines
more lines

createPopup() 只是创建一个弹出窗口,添加一个网格作为子项并显示弹出窗口。我的问题是,为什么首先显示messageBox,然后显示Popup,它出现在此方法中的所有行完成之后?我怎样才能让这个弹出窗口在这个方法中的所有行都完成之前显示?

4

2 回答 2

1

所有 UI 更改通常都会排队并立即显示在屏幕上。这不包括 MessageBox。因此它会立即显示并阻止执行,直到用户单击确定。因此,即使您的 popUP 第一次执行,它也只会在 MessageBox 之后显示在 UI 中。

对于您的问题,请尝试将您的 MessageBox.Show(something) 放在单独的线程中。

createPopup();
Dispatcher.BeginInvoke(() =>
   {
       MessageBox.Show("some message");
   });
more lines
more lines

试试看。我不确定它是否能解决您的问题,因为我不知道 createPopUp() 方法中的代码。

于 2012-09-21T18:30:16.747 回答
0

创建弹出窗口,直到 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");
}
于 2012-09-22T22:15:26.377 回答