看板 C_Sharp 關於我們 聯絡資訊
想請教各位一個問題 我目前有一份處理影像的程式 目的是要做出一個小動畫 就是有兩張圖,在400 * 300的範圍要呈現出來 一開始是A圖,B圖會由左至右把A圖推出去,而且每推一次必須存成一張圖片 (A、B圖皆為400 * 300) 共150次,所以要存成150張圖檔 因為影像處理時間較久,於是丟給backgroundworker處理 以下是我的程式碼: Bitmap Sample = new Bitmap(400, 300); for (int frame = 0; frame < 150; frame++) { switch (frame % 3) { case 0: shift += 2; break; case 1: case 2: shift += 3; break; } for (int i = 0; i < shift; i++) { for (int j = 0; j < 300; j++) { Sample.SetPixel(i, j, Sanbmp.GetPixel(400 - shift + i, j)); } } for (int i = 0; i < 400 - shift; i++) { for (int j = 0; j < 300; j++) { Sample.SetPixel(shift + i, j, Vanbmp.GetPixel(i, j)); } } pictureBox4.Image = Sample; pictureBox4.Image.Save(frame.ToString() + ".bmp"); progressBar1.Increment(1); Thread.Sleep(50); } 那我的問題在於,我沒有做存檔的動作時,程式是正常的跑完 但是一加了存檔那行之後,便一直跟我說「某些地方正在使用物件」的Error 我在想是不是Thread速度太快,搶了sample這塊Bitmap 於是我加了Thread.Sleep降緩一下速度,不過結果也是一樣 我所使用的電腦為Duo core,會有影響嗎? 還請各位指教一下,謝謝 -- Ultimate Treein ˍˍ ▕慕京▏ ▕子印▏  ̄ ̄ http://septemhill.blogspot.com -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.10.191
godman362:Sanbmp為B圖,Vanbmp為A圖 03/14 23:40
pico2k:Thread.Sleep(1000) 03/15 00:41
pico2k:Sleep的單位是"毫秒"... 03/15 00:45
godman362:我知道是毫秒,等1秒也是沒用 03/15 06:33
godman362:所以我想應該不會是Thread.Sleep的問題 03/15 06:33
pico2k:下中斷點去查,別用想的... 03/15 10:58
Lucemia:將picturebox相關的code移到progress report 試試 03/15 13:29
wesley412:應該要用INVOKE方式,我用圖片也都會這樣,才不會互爭~ 03/15 13:50
wesley412:http://jasperlu.blogspot.com/這一個把字串改成picBox 03/15 13:51
godman362:後來我已經試驗出來,是Duo core產生的race condition 03/15 18:56
godman362:在pictureBox1.Image = xxxx 03/15 18:56
godman362:結果另一個cpu去做下面那個存檔的動作 03/15 18:56
godman362:所以我後來是在pictureBox1.Image那行下面做了sleep 03/15 18:57
godman362:不過還是要感謝各位前輩給的建議 03/15 18:57