我正在为特定程序编写插件(Autodesk Revit)。 在这个插件中,我向用户展示了一个WinForm。 使用winform上的按钮,用户将临时发送回主应用程序(Autodesk Revit)进行选择,一旦完成,它将被发送回WinForm。
初始化Winform时,我可以使用Form.Show()
或使用Form.ShowDialog()
如果我将使用Form.Show()
表格将正确显示,表格上的按钮可用于让用户在主应用程序中进行选择,并在完成后将其发送回表格在选择之前使用this.hide()
进行选择,之后使用this.Show()
进行选择,以便在选择过程中暂时隐藏表单。
如果我将使用Form.ShowDialog()
表格将正确显示并且可以使用表单上的按钮,但是因为ShowDialog在等待对话结果时冻结主应用程序,用户将无法进行选择。
这就是为什么我想要使用Form.Show()
代替Form.ShowDialog()
。
但这是我面临的问题:
如果我使用Form.Show()
,表单可以移动到后台或其他监视器,并且由于主应用程序不处于冻结状态,用户可以继续工作并完全忘记表单仍处于打开状态。< / p>
所以我想知道是否有可能以某种方式空闲/冻结主应用程序,就像我在使用ShowDialog
时使用Show
一样?
答案 0 :(得分:2)
我认为您需要稍微调整一下逻辑:
ShowDialog
,但关闭表单以返回原始应用程序MemoryStream
)。答案 1 :(得分:0)
使用ShowDialogue()
时,使用其他主题不会挂起主表单使用下面的代码:
//Initially
this.Enabled = false;
Form form = new YourForm();
form.TopMost = true;
form.Focus();
System.Threading.Thread thread = new System.Threading.Thread(() => form.ShowDialog());
thread.Priority = System.Threading.ThreadPriority.Highest; //<- just an example, set it according to your need
thread.Start();
//If you want to close it from the main form (you can do it from the opened form itself though)
form.Invoke((MethodInvoker)delegate
{
form.Close();
});
thread.Abort();
this.TopMost = true;
this.Enabled = true;
this.Focus();
this.TopMost = false;