1
在下面的代码是一个后台工作线程中运行:多调用/ BeginInvoke的调用没有完成没有了Thread.Sleep()
while (StaticVideoList.DecodedFramesList.Count > 0)
{
if (StaticVideoList.DecodedFramesList.ContainsKey(a))
{
byte[] output;
if(StaticVideoList.DecodedFramesList.TryRemove(a, out output))
{
MemoryStream ms = new MemoryStream(output);
Image img = Image.FromStream(ms);
a++;
this.Invoke((Action)delegate
{
textEdit7.Text = "Num Frame: " + a.ToString() + "/" + (1000m/((decimal)sw.ElapsedMilliseconds/(decimal)a)).ToString();
pictureEdit1.Image = img;
});
// Works if I do this.. 10 is the minium.
//System.Threading.Thread.Sleep(10);
}
}
}
我的问题是,除非我在循环中添加Thread.Sleep(10)
不是所有的调用调用。整个循环被调用,但只有20%的调用调用(在停止时得到20%,而不是间歇的结果)
如果我在调试中一步一步工作,它也可以正常工作。
想到也许问题是当后台工作线程完成它取消任何从它调用的调用。但是,将Thread.Sleep(10000)长时间挂起后台线程并没有做任何事情。
对于调用调用的速度有多快?
而且BeginInvoke
有同样的“问题”
backgroundworker包含更新程序的功能 –
我已经用它作为reportProgress的替代方法并在userState参数中传递数据但是我仍然困惑为什么上述不起作用 – james
当你说*“不起作用“*你的意思是调用调用实际上是错过了或者UI缺少更新?你确定更新没有发生得太快,你没有注意到它们吗? – James