如何在C#中控制线程窗口

时间:2012-02-14 09:03:33

标签: c# winforms multithreading

我有一个C#应用程序,它作为系统托盘中的上下文菜单运行。其中一个选项将显示一个“系统信息”框,此刻我正在另一个线程(点击事件)中打开此窗口,就像这样......

void menu_SystemInformation_Click(object sender, EventArgs e)
{
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(menu_Systeminformation_Thread));
t.Start();
}
void menu_Systeminformation_Thread()
{
    Application.Run(new SystemInformation());
}

我对此有两个问题......

  1. 如何选择该选项时,如何确保只打开此表单的一个实例。
  2. 如何在应用程序关闭时自动关闭此表单(如果已打开)。
  3. 感谢任何帮助。我只做了几个星期的C#,所以对我这么简单! 欢呼声,

3 个答案:

答案 0 :(得分:2)

  

1.如果选择该选项,我怎样才能确保只打开此表单的一个实例。

编程。有一个中心位置,检查您是否已经打开窗户。没有自动化,但这是微不足道的。

  

2.如何在应用程序关闭时自动关闭此表单(如果已打开)。

你不做任何事。该过程关闭,无论如何所有窗口都会关闭。所有打开的操作系统资源都已发布,包括文件等。

答案 1 :(得分:0)

我想补充TomTom回答以下内容:

  

如何确保在打开时只打开此表单的一个实例   选项已被选中。

我会实现Singleton pattern来实现它。

答案 2 :(得分:0)

  1. 如果您的意思是应用程序的一个实例 - 您可以使用名为Mutex的
  2. 如果您指的是具体Form对象的单个实例 - 有许多不同的情况。作为一个简单的解决方案 - 单身人士。基本上声明静态bool变量,如static bool isInstanceCreated,并在创建新实例之前检查它