如何在自己的线程上创建表单并在整个应用程序生命周期内保持打开状态

时间:2008-12-15 21:35:49

标签: winforms multithreading

我正在创建一个小测试组件并遇到问题

基本上,组件是控制对数据库的所有访问的类的装饰器,它创建一个带有两个按钮的表单:“模拟丢失的连接”和“重新连接”。按下按钮,而不是让函数调用通过包装器开始抛出NoConnectionException(),这很简单,真正有助于测试。

问题是这个特殊应用程序在检测到连接丢失时会引发一个模式对话框“连接丢失!”坐在那里直到重新获得连接。因为它是模态的,所以我不能按下我的漂亮按钮来模拟重新连接。

因此,我需要做的是在不同的线程中运行我的小测试表单。我不是很确定如何做到这一点。我试过了

new Thread(
  new ThreadStart(
    (Action)delegate {_form.Start();}
  )
).Start();

但是一旦方法返回,线程就会关闭,因此除了瞬间,表单永远不会显示。

知道如何实现我的目标吗?

4 个答案:

答案 0 :(得分:3)

您需要在新创建的线程上启动消息循环。您可以通过调用Application.Run(表单)来完成此操作。

答案 1 :(得分:1)

尝试

new Thread(
  new ThreadStart((Action)delegate {
        _form.Start();
        System.Windows.Forms.Application.Run();
    }
  )
).Start();

答案 2 :(得分:0)

听起来你没有抓住你的线​​程。它是一个对象,就像其他所有东西一样,所以如果它的范围是你的方法,一旦你的方法退出它就会超出范围。尝试将其设为实例变量。

答案 3 :(得分:0)

showdialog :
System.Threading.Thread t = new System.Threading.Thread(new form1().ShowDialog());
t.Start();