c# - InvokeRequired 在新创建的 Dialog 上

标签 c# .net winforms

我们的应用程序中有以下方法来显示对话框。从 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/

相关文章:

c# - 动态加载dll

.net - 如何在 C# 中使用 NAudio 将 3 个 wav 文件加入到具有 3 个 channel 的单个文件中?

c# - 我可以让一个窗口在用户松开鼠标按钮之前不调整自己的大小吗?

c# - 在 Azure 上解析 html 文件

c# - Roslyn 代码分析从无错误解决方案中返回错误的构建错误

c# - 如何在包装面板中设置两个对齐方式

c# - 循环遍历文本框

c# - 用于将来在当前线程上执行代码的 PostMessage 的 C# 等效项是什么?

java - 不同技术之间的两阶段提交(COM+、Java)

c# - 如何在 DataGridView 控件中实现过滤?