2012-06-04 45 views
1

我正在使用一些委託來顯示或更改線程中表單上的某些內容。事件方法如下所示。C#委託中的線程休眠時間

private void PictureBoxImageSet(PictureBox PictrBox, Image Img) 
{ 
    try 
    { 
     PictrBox.BeginInvoke((ThreadStart)delegate() 
     { 
      PictrBox.Image = Img; 
     }); 
     Thread.Sleep(FORM_ITEM_INVOKE_TASK_SLEEP_VALUE); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

我是否總是要使用Thread.Sleep()方法?如果我將其刪除,那麼我的軟件將如何受此更改影響?在這些事件中,線程睡眠值將會是什麼?

+0

我非常懷疑這會一直工作,你最好處理的事件比發射異步操作然後睡覺(誰知道你的線程是否總是會睡得足夠長?) – Alex

回答

3

函數PictureBoxImageSet被調用的代碼將確定進一步的執行,而不會延遲thread.sleep中使用的時間。

如果您在圖片更改時使用了事件,則可能會影響其他某個線程是否根據圖片數據執行某些工作。

如果要同步完成此作業,請調用PictrBox.Invoke方法並刪除thread.sleep。它將保證在進一步執行代碼之前設置圖像。