0

バックグラウンドで動作しているメソッドでは、2つの重要な行があります:

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

createPopup()は、ポップアップを作成し、子としてグリッドを追加して、ポップアップを表示します。私の質問は、なぜ最初にmessageBoxが表示され、次にPopupが表示されるのかということです。これは、このメソッドのすべての行が完了した後に表示されます。このメソッドのすべての行が完了する前に、このポップアップを表示するにはどうすればよいですか?

4

2 に答える 2

1

通常、UIの変更はすべてキューに入れられ、画面に一度に表示されます。そして、これにはMessageBoxは含まれていません。したがって、ユーザーが[OK]をクリックするまで、すぐに表示され、実行されません。したがって、popUPが最初に実行されても、メッセージボックスの後にのみUIに表示されます。

問題が発生した場合は、MessageBox.Show(something)を別のスレッドに配置してみてください。

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

試してみる。createPopUp()メソッドのコードがわからないので、問題が解決するかどうかはわかりません。

于 2012-09-21T18:30:16.747 に答える
0

ポップアップを作成すると、レイアウトイベントが発生するまで実際にはポップアップが画面に描画されません。ポップアップを表示する前にポップアップが描画されていることを確認する場合は、イベントハンドラーをポップアップの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 に答える