【发布时间】:2010-08-14 10:28:40
【问题描述】:
我只是尝试在每次单击按钮时运行一个新线程,这应该会创建一个新表单。我在 MainForm 中的按钮单击事件中尝试了这个:
private void button1_Click(object sender, EventArgs e)
{
worker1 = new Thread(new ThreadStart(thread1));
worker2 = new Thread(new ThreadStart(thread2));
worker1.Start();
worker2.Start();
}
private void thread1()
{
SubForm s = new SubForm();
s.Show();
}
private void thread2()
{
SubForm s = new SubForm();
s.Show();
}
Subform 按钮点击事件中的代码如下:
private void button1_Click(object sender, EventArgs e)
{
int max;
try
{
max = Convert.ToInt32(textBox1.Text);
}
catch
{
MessageBox.Show("Enter numbers", "ERROR");
return;
}
progressBar1.Maximum = max;
for ( long i = 0; i < max; i++)
{
progressBar1.Value = Convert.ToInt32(i);
}
}
这是正确的方法吗?因为我试图打开两个独立的表单,所以一个线程中的操作应该不会影响另一个线程。
或者 BackGroundworker 是实现这一点的解决方案吗?如果是的话,有人可以帮我吗?
【问题讨论】:
-
我认为 Windows 应用程序每个进程只有一个 GUI 事件循环?因此所有 UI 的东西都需要在主线程中完成? (CMIIW)
-
@user:你具体想解决什么问题?
-
如果我在主窗体中单击按钮两次,它当然会打开两个新窗体,即带有进度条的子窗体和所有窗体。如果向第一个子窗体提供了一个输入,并且它运行了很长时间(比如我有一个没有结束的进度条),我无法对打开的第二个子窗体执行任何操作。所以我想到了单独打开子表单,彼此独立..
-
没有“主线程”,任何线程都可以运行自己的消息循环。
标签: c# .net winforms multithreading message-loop