1

このアプリケーションには、ダイアログボックスを表示するための次のメソッドがあります。このメソッドは、UIスレッドと非UIスレッドから呼び出されます。ダイアログがUIスレッドに表示されるように、messageDialogでInvokeRequiredを呼び出しても大丈夫ですか?

public static DialogResult ShowMessageDialog(MessageInfo messageInfo,ButtonFlags flags,IconType iconId,HorizontalAlignment btnAlignment,bool topMost)
{
DialogResult retDialogResult = DialogResult.None;

MessageDialog messageDialog = new MessageDialog(messageInfo.GetLanguageBasedFieldValue(MessageInfoField.Message), iconId);
messageDialog.TopMost = topMost;

// Initialize the layout of Message Dialog.
messageDialog.Initialize();
retDialogResult = messageDialog.ShowDialog();

return retDialogResult;
}
4

1 に答える 1

4

いいえ、実行しているスレッドで構築されているInvokeRequiredため、trueが返されることはありません。MessageDialogまた、InvokeRequiredコントロールのハンドルが作成されるまで常にfalseを返します。これは、後で行われるまで発生しません(MSDNを参照)。

ShowMessageDialog常にUIスレッドから呼び出すかShowMessageDialog、を保存するなど、UIスレッドにアクセスする方法があることを確認してくださいISynchronizeInvoke。前者の方が良い解決策だと思います。

于 2012-07-20T14:26:48.873 に答える