我们的应用程序中有以下方法来显示对话框。从 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;
}
最佳答案
不,InvokeRequired
永远不会返回 true,因为 MessageDialog
是在您正在执行的线程上构造的。此外,InvokeRequired
将始终返回 false,直到创建控件的句柄为止,直到稍后才会发生(请参阅 MSDN)。
要么确保你总是从 UI 线程调用 ShowMessageDialog
,要么有办法让 ShowMessageDialog
进入 UI 线程,比如存储一个 ISynchronizeInvoke
。我认为前者是更好的解决方案。
关于c# - InvokeRequired 在新创建的 Dialog 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580882/