1

我们的应用程序中有以下方法来显示对话框。该方法从 UI 线程和非 UI 线程调用。是否可以在 messageDialog 上调用 InvokeRequired 以确保对话框将显示在 UI 线程上?

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 回答