我有一个主WPF窗口mywindow.showDialog 当在窗口上单击按钮时,执行命令 假设该命令是SendToTableCommand
protected virtual void SendToTableExecute(object o)
{
UIThread.BeginInvoke(new Action<object>(SendToTableExecuteUI),o);
}
private void SendToTableExecuteUI(object o)
{
if (o is Control)
{
m_OwningWindow = UIHelper.FindVisualParent<Window>((Control)o);
}
do sth...
if (m_OwningWindow != null)
{
//only set DialogResult when window is ShowDialog before
if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
m_OwningWindow.DialogResult = true;
}
}
前一段时间,m_OwningWindow.DialogResult = true
抛出异常。所以我添加了一个使用IsThreadModal的if检查。它已经工作了一段时间,但现在m_OwningWindow不会因为IsThreadModal是假的而关闭。
我不知道解决问题的正确方法是什么,并认为我没有正确处理它。 请帮忙。提前谢谢
答案 0 :(得分:1)
答案 1 :(得分:0)
我在分配DialogResult
之前隐藏了我的窗口。交换订单,因此在隐藏窗口之前分配DialogResult
,修复了我的问题。即使窗口为ShowDialog
'd,也必须将其视为“打开”才能设置DialogResult
。
修改:窗口应该关闭,而不是隐藏。在我发布之后,这就是我。
答案 2 :(得分:-1)
使用Form.Modal
确定您的表单是作为窗口还是模态对话框打开。
无论是否是对话框,您都应该能够关闭()表格。 (在某些情况下,您可能还需要在关闭后处理它)
此外,DialogResult是一个枚举类型 - true
不是我期望看到的值。通常会使用DialogResult.OK
或DialogResult.Yes
。