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