我创建了一个Thread,我只需要从表单的左侧移动一个radiobutton.这运行,但我的应用程序被阻止,我无法移动表单,没有(我认为这是创建线程的原因,同时做多个事情)这是我的代码,我希望你明白我问.提前致谢
private void moveRight( )
{
radioButton1.Left++;
}
private void moveLeft()
{
radioButton1.Left--;
}
public void run()
{
while (true)
{
while (radioButton1.Left != this.ClientSize.Width - 10)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(moveRight));
}
else
{
moveRight();
}
}
while (radioButton1.Left != 10)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(moveLeft));
}
else
{
moveLeft();
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(run));
t.Start();
}
Run Code Online (Sandbox Code Playgroud)
当你调用Invoke一个控件时,你告诉它在UI线程中运行提供的代码.
鉴于此,您的代码正在启动一个新线程,然后在该线程中告诉UI线程运行一堆永远运行的代码.
现在你明白为什么UI线程被阻止了我希望?
您需要在后台线程中使用主要的while循环(即不在Invoke调用内部)并将Invoke调用限制为更新UI的小代码块.
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |