C# 两个线程正在互相减速#
我在Picturebox中有两张图片。当我选中复选框时,风扇开始旋转。 我创建了两个不同的线程(但它们做的是相同的工作)。如果我只检查其中一个,它工作没有问题,但如果我同时检查两个,它们会相互减慢。我希望线程不会相互影响。我如何处理这种情况C# 两个线程正在互相减速#,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,我在Picturebox中有两张图片。当我选中复选框时,风扇开始旋转。 我创建了两个不同的线程(但它们做的是相同的工作)。如果我只检查其中一个,它工作没有问题,但如果我同时检查两个,它们会相互减慢。我希望线程不会相互影响。我如何处理这种情况 不要在后台线程中修改UI。 如果这是winform应用程序,请使用System.Windows.Forms.Timer。 如果这不是winform应用程序,请为您找到一个调用UI线程 // Initial code var tmr = new Sys
不要在后台线程中修改UI。 如果这是winform应用程序,请使用System.Windows.Forms.Timer。 如果这不是winform应用程序,请为您找到一个调用UI线程
// Initial code
var tmr = new System.Windows.Forms.Timer();
tmr.Interval = 10;
tmr.Tick += Tmr_Tick;
tmr.Enabled = true;
private void Tmr_Tick( object sender, EventArgs e )
{
// Rotate cb fan if checked
// Rotate radial fan if checked
}
为了解释为什么这两个更新函数会相互减慢速度,我假设您在post中的代码片段不完整。应该有
Invoke
来更改控制
线程.Sleep
添加到Invoke
中,这会导致UI线程在控件更新后休眠10毫秒。
有两个线程,每个线程更新并睡眠10毫秒,因此需要20毫秒才能看到控件更改。这可能比20毫秒更糟糕我看到您的代码有一个问题,但它可能是无关的(但也可能不是),您正在从辅助线程更改UI对象。这需要在这些UI对象上使用
Invoke
方法进行同步。若要调试您的代码,请逐位从线程中删除位,以找出影响其他线程的是什么。您的代码能否正常运行?使用非ui线程应该不能更改ui。您有两个非ui线程来更改它。使用Windows.Form.Timer可以更好地更改UI,因为您不需要处理线程问题。我尝试了这个解决方案,它成功了。它们并没有相互减速。谢谢但是它不像我用线程做的那样平滑。如果你想让它运行得更平滑,可以缩短间隔,使用预先计算好的图片,而不是通过图形旋转。另外,还可以搜索可能会提高图片更新速度的DoubleBuffer
。我已经尝试了DoubleBuffer,但它并没有真正起作用。我将搜索预先计算好的图片。
// Initial code
var tmr = new System.Windows.Forms.Timer();
tmr.Interval = 10;
tmr.Tick += Tmr_Tick;
tmr.Enabled = true;
private void Tmr_Tick( object sender, EventArgs e )
{
// Rotate cb fan if checked
// Rotate radial fan if checked
}