Silverlight 在WindowsPhone7中更新用户界面
在后台工作的方法中,我有两条重要的线:Silverlight 在WindowsPhone7中更新用户界面,silverlight,windows-phone-7,Silverlight,Windows Phone 7,在后台工作的方法中,我有两条重要的线: createPopup(); MessageBox.Show(sth); more lines more lines createPopup()只创建一个弹出窗口,添加一个网格作为子项并显示弹出窗口。 我的问题是,为什么首先显示messageBox,然后显示弹出窗口,它在该方法中的所有行完成后都会出现?如何在完成此方法中的所有行之前显示此弹出窗口?所有UI更改通常都已排队,并将立即显示在屏幕上。 这不包括MessageBox。所以它会立即显示并阻止执行,
createPopup();
MessageBox.Show(sth);
more lines
more lines
createPopup()只创建一个弹出窗口,添加一个网格作为子项并显示弹出窗口。
我的问题是,为什么首先显示messageBox,然后显示弹出窗口,它在该方法中的所有行完成后都会出现?如何在完成此方法中的所有行之前显示此弹出窗口?所有UI更改通常都已排队,并将立即显示在屏幕上。 这不包括MessageBox。所以它会立即显示并阻止执行,直到用户单击Ok。因此,即使您的弹出窗口是第一次执行,它将只显示在用户界面后的MessageBox 对于您的问题,请尝试将MessageBox.Show(某物)放在单独的线程中
createPopup();
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show("some message");
});
more lines
more lines
试试看。我不确定它是否解决了您的问题,因为我不知道createPopUp()方法中的代码。创建弹出窗口,直到布局事件发生后才在屏幕上实际绘制它。如果要确保在显示弹出窗口之前已绘制该弹出窗口,请将事件处理程序附加到该弹出窗口的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");
}
MessageBox将停止执行,直到您与之交互。因此,在方法完成之前,不会执行下一行,也不会绘制上一行。如果显示弹出窗口,则应显示在MessageBox之前