我们的应用程序中有以下方法来显示对话框。从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;
}
答案 0 :(得分:4)
不,InvokeRequired
将永远不会返回true,因为MessageDialog
是在您正在执行的线程上构造的。此外,InvokeRequired
将始终返回false,直到创建控件的句柄,直到稍后才会发生(请参阅MSDN)。
要么确保始终从UI线程调用ShowMessageDialog
,要么让ShowMessageDialog
进入UI线程,例如存储ISynchronizeInvoke
。我认为前者是一个更好的解决方案。