在下面的代码中,在后台工作线程中运行:
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
也有相同的"问题"
向我调用似乎是一条红鲱鱼。循环似乎"停止"但在您睡眠线程时工作的事实向我表明您有竞争条件。
我的建议是将您的循环剥离到最低限度并重建它,直到您再次遇到问题 - 这应该可以帮助您确定问题所在。