Windows窗体:启动时加载但隐藏窗体

时间:2016-06-13 11:20:24

标签: c# windows winforms

我正在创建一个系统托盘应用程序。在初始化应用程序时,我想:

  • 初始化并加载表单,使其在后台运行
  • 但保持表单隐藏(直到用户双击托盘图标)

表单加载并在后台运行非常重要,因为表单包含一个嵌入式浏览器,它将初始化Web套接字连接以接收数据。但它需要被隐藏。我试着通过使用表单的Visible属性来解决这个问题。到目前为止,我有这个(只显示相关代码):

public TrayApp()
{
    var ni = new NotifyIcon();     
    InitializeForm();
    ni.DoubleClick += this.ShowForm;
}

private void InitializeForm()
{
    //load the form in the background so it can start receiving incoming data, but don't actually show the form
    myForm = new MyForm();
    myForm.Show();
    myForm.Visible = false;
}

private void ShowForm(object sender, EventArgs e)
{
    myForm.Visible = true;
}

这很有效,除了一个小细节:在启动应用程序时,我简要地看到表单在隐藏之前闪烁。我认为Show方法还会将Visible标记设置为true,从而导致闪存发生。

我试过的其他事情,基于评论:

  • 请勿致电myForm.Show(),仅初始化表单。这样可以避免闪存,但不会加载浏览器,因此未初始化websocket连接
  • 执行myForm.Hide():与之前相同的效果
  • 在致电Opacity之前将0设为Show(),并在将1设置为Visible后将其设置为false:这实际上有效,但是我希望有一个更清洁的解决方案

如何避免闪存并保持表单运行但隐藏?

2 个答案:

答案 0 :(得分:0)

您可以尝试在显示表单之前设置hide属性。

myForm = new MyForm();
myForm.Visible = false;
myForm.Show();

答案 1 :(得分:0)

您可以尝试编写初始化套接字的函数。将此函数放入MyForm类中,并从InitializeForm()内部调用它。

希望这有帮助。