我点了button1开始一个线程.
按了这个按钮后我想按第二个按钮就按不动了..直到线程运行完了..这是为什么啊.
请高手指点一二
下面是代码:
private void button1_Click(object sender, EventArgs e)
{
Thread threadParse = new Thread(new ThreadStart(RunParser));
threadParse.Start();
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("点了第二个按钮");
}
delegate void GetRunParserHandle();
void RunParser()
{
if (this.InvokeRequired)
{
GetRunParserHandle rph =
new GetRunParserHandle(this.RunParser);
this.Invoke(rph);
return;
}
else
{
Thread.Sleep(5000);
textBox1.Text = "5秒过了";
}
}
按了这个按钮后我想按第二个按钮就按不动了..直到线程运行完了..这是为什么啊.
请高手指点一二
下面是代码:
private void button1_Click(object sender, EventArgs e)
{
Thread threadParse = new Thread(new ThreadStart(RunParser));
threadParse.Start();
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("点了第二个按钮");
}
delegate void GetRunParserHandle();
void RunParser()
{
if (this.InvokeRequired)
{
GetRunParserHandle rph =
new GetRunParserHandle(this.RunParser);
this.Invoke(rph);
return;
}
else
{
Thread.Sleep(5000);
textBox1.Text = "5秒过了";
}
}
我是初学线程,能帮我解决一下吗...
还有,this.Invoke();是同步调用
this.BeginInvoke();就是异步了
void RunParser()
{
if (this.InvokeRequired)
{
GetRunParserHandle rph =
new GetRunParserHandle(this.Run);
this.BeginInvoke(rph);
return;
}
} void Run()
{
Thread.Sleep(5000);
textBox1.Text = "5秒过了";
}
{
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
} private void button1_Click(object sender, EventArgs e)
{
Thread threadParse = new Thread(new ThreadStart(RunParser));
threadParse.Start();
rph = new GetRunParserHandle(Run);
} private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("点了第二个按钮");
} delegate void GetRunParserHandle();
GetRunParserHandle rph;
void RunParser()
{
if (this.InvokeRequired)
{
rph.BeginInvoke(null,null);
} } void Run()
{
Thread.Sleep(5000);
textBox1.Text = "5秒过了";
}
}
}
加上这一句就可以
public void OnTimer(Object source, ElapsedEventArgs e)
{
Invoke(new EventHandle(TimerAction), source, e);
}public void TimerAction(Object source, EventArgs e)
{
time2 = time2 + 1;
labelTime.Text = time2.ToString();
}
你的执行过程是UI线程->新的线程->再回到UI线程(执行你的代码).
等于绕了一个弯回来,最后还是UI线程被等待。
{
EventHandler eh = delegate
{
textBox1.Text = "5秒过了";
};
Thread.Sleep(5000);
Invoke(eh);
}
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
该怎么解决呢?