Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 在WindowsPhone7中更新用户界面_Silverlight_Windows Phone 7 - Fatal编程技术网

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之前