我有一个可以使用表单显示窗口的应用程序.只有在使用-debug标志运行应用程序时才会显示该表单,否则它仅显示在托盘中.
var form = new Form();
if(DebugMode)
form.Show();
Run Code Online (Sandbox Code Playgroud)
当在调试模式下运行时,应用程序将侦听CloseMainWindow(),因为显示了表单.如何让应用程序也不显示CloseMainWindow()?如果不是在调试模式下,我不希望用户能够与表单进行交互.
我尝试了几种方法,比如显示窗口但是将大小设置为0.这显示了一个小形式,即不隐藏.
if (!DebugMode)
{
form.Show();
form.Size = new Size(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
同时显示它,然后隐藏它不起作用:
if (!DebugMode)
{
form.Show();
form.Hide();
}
Run Code Online (Sandbox Code Playgroud)
显示它,但开始最小化并且未在任务栏中显示也不起作用:
if (!DebugMode)
{
form.Show();
form.WindowState = FormWindowState.Minimized;
form.ShowInTaskbar = false;
}
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了一些非常明显的东西,或者是否无法以优雅的方式将流程最小化到托盘?
我不确定你能不能通过Process.CloseMainWindow()。我似乎记得,没有可见主窗口的进程已MainWindowHandle设置为IntPtr.Zero.
你需要某种解决方法。我的建议是自己手动跟踪主窗口句柄:
static void Main()
{
...
MainWindow mainWindow = new MainWindow();
[HandleRepository] = mainWindow.Handle;
Application.Run(mainWindow);
}
Run Code Online (Sandbox Code Playgroud)
然后,当您想关闭该进程时,请使用解决方法:
public void EndProcess()
{
Form mainWindow= (MainWindow)Form.FromHandle([HandleRepository]);
mainWindow.Close();
}
Run Code Online (Sandbox Code Playgroud)
可能不是最优雅的解决方案,但它应该有效(尚未测试)
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |