我如何强制ShowDialog
从后台线程返回?
我有一个构建在C++/CLR框架之上的WPF应用程序,它正在监听框架发送的消息.一个特定的消息非常重要,我需要关闭所有当前窗口.但是,如果模态Dialog
(由ShowDialog
我的主窗口创建)处于活动状态并等待用户输入,则窗口将不会关闭,因为它正在等待ShowDialog
返回.如何强制模态Dialog
关闭和解除代码执行?
我尝试设置DialogResult
或调用Close
,但似乎不起作用.
编辑:Dialog
由我的主窗口创建,它需要一个返回值,如下所示:(在单击事件处理程序中MainWindow
):
Window modalDialog = new Window();
bool ret = (bool)modalDialog.ShowDialog();
if (ret == true)
{
// do stuff
}
else
{
// do some other stuff
}
Run Code Online (Sandbox Code Playgroud)
当框架发送消息(进入与UI线程不同的线程)时,我打电话MainWindow.Close()
.此时模态对话框将关闭,但检查Dialog
(after ShowDialog
)返回值的代码仍在堆栈中.不知怎的,这迫使主窗口不会消失.
我有一个 DataGridView,它包含两个文本列和一个复选框列。如果用户在 Vista 或 Windows 7 中增大字体大小,复选框将不再可见。我将 AutoSizeRowsMode 设置为 AllCells 并在最初修复它。但是网格中的行是可编辑的,如果用户单击一行进行编辑,复选框将再次消失,直到取消选中该行。
我无法在网上找到有关此问题的任何资源,因此我很惊讶以前没有人遇到过这种情况。行高设置为 21,因此超过复选框所需的 17 大小...
这是一个 Outlook 插件 DLL,所以我不能使用 SetProcessDPIAware()。