以下代码在后台工作线程中运行:
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)
,否则不会进行所有的Invoke调用。调用整个循环,但只有20%的调用调用(在停止时获得20%,而不是间歇性结果)
如果我在调试中单步执行它也可以正常工作。
想想也许问题是当Background Worker线程完成时它取消了从它做的任何Invokes。但是放一个Thread.Sleep(10000)来挂起后台线程更长时间没有做任何事情。
调用电话的速度是否有限制?
同样BeginInvoke
也有相同的“问题”
答案 0 :(得分:1)
调用我似乎是一个红鲱鱼。循环似乎“停止”但在你睡觉时工作的事实会告诉我你有竞争条件。
我的建议是将你的回路剥离到最低限度和最低限度。重建它直到再次遇到问题 - 这应该可以帮助您确定问题所在。