这只是一个示例代码,如果您已经运行了一个表单,该怎么做
在你的主窗体构造函数中
// Mark existing thread
Thread.CurrentThread.Name = "First";
this.Click += delegate(object a, EventArgs b) { MessageBox.Show(Thread.CurrentThread.Name); };
// Start new thread
ThreadStart ts = new ThreadStart(NewThread);
Thread t = new Thread(ts);
t.Name = "Second";
t.Start();
VB
' Mark existing thread
Thread.CurrentThread.Name = "First"
AddHandler me.Click, Sub(a As Object, b As EventArgs) MessageBox.Show(Thread.CurrentThread.Name)
' Start new thread
Dim ts As New ThreadStart(NewThread)
Dim t As New Thread(ts)
t.Name = "Second"
t.Start()
现在,打开表单的方法
private void NewThresd()
{
Form f = new Form();
f.Text = "dfsdfsdfsdfsd";
f.Click += delegate(object a, EventArgs b) { MessageBox.Show(Thread.CurrentThread.Name); };
f.ShowDialog();
}
VB:
Private Sub NewThresd()
Dim f As New Form()
f.Text = "dfsdfsdfsdfsd"
AddHandler f.Click, Sub(a As Object, b As EventArgs) MessageBox.Show(Thread.CurrentThread.Name)
f.ShowDialog()
End Sub
这将做的是,它将启动一个线程并在其中打开一个表单。当您单击表单时,它将显示线程的名称,以证明您确实在不同的线程上运行表单。
请记住,这不是可用于生产的代码。标记线程并连接单击事件以显示概念。还有,比如这样不好,因为这里会有内存泄漏
f.Click += delegate(object a, EventArgs b) { MessageBox.Show(Thread.CurrentThread.Name); };
你应该在课堂上拥有
private EventHandler _hndlr = delegate(object a, EventArgs b) { MessageBox.Show(Thread.CurrentThread.Name); };
VB
Private _h As EventHandler = Sub(a As Object, b As EventArgs) MessageBox.Show(Thread.CurrentThread.Name)
然后你连接处理程序
f.Click += _hndlr;
VB
AddHandler f.Click, _hndlr
然后,当关闭表单时 - unwire
f.Click -= _hndlr;
VB
RemoveHandler f.Click, _hndlr