2013-04-15 141 views
-1

目前我有一個圖片框,其上保存兩個項目,一個處理gif文件和一個標籤。現在,我已經叫BringToFront()的所有三個項目(圖片框,處理GIF,標籤)當過BackgroundWorker的被調用c背景問題#

下面是我回地面工人

private void buttonUpload_Click(object sender, EventArgs e) 
{ 
    LoadFile(pdfFullPath); 
    bgwLoadFile.RunWorkerAsync(dummyPDFPath); 
    pictureBox1.BringToFront(); 
    picLoading.BringToFront(); 
    label.BringToFront(); 
} 

private void bgwLoadFile_DoWork(object sender, DoWorkEventArgs e) 
{  
    this.Invoke((MethodInvoker)delegate() { 
     acrPDFViewer.LoadFile(e.Argument.ToString()); 
    }); 
} 


private void bgwLoadFile_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if (e.Cancelled == true) 
    { 
    } 
    else if (e.Error != null) 
    { 
    } 
    else 
    { 
     pictureBox1.SendToBack(); 
     picLoading.SendToBack(); 
     label.SendToBack(); 
    } 
} 

代碼片段在執行它這三個項目都沒有顯示我。

+0

你是否收到一些異常或錯誤信息? –

+0

我沒有得到任何例外或錯誤..當我調試它時,雖然所有的步驟,但沒有采取行動已經發生 – Ganeshja

+0

你確定你到達'bgwLoadFile_RunWorkerCompleted'事件處理程序嗎?您可能需要重複調​​用[Application.DoEvents()](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.doevents.aspx)以確保「RunWorkerCompleted」事件被正確解僱。 –

回答

3

這個工作對我來說:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     UpdateControls(false); 

     bgwLoadFile.DoWork += new DoWorkEventHandler(bgwLoadFile_DoWork); 
     bgwLoadFile.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwLoadFile_RunWorkerCompleted); 
    } 

    private void buttonUpload_Click(object sender, EventArgs e) 
    { 
     UpdateControls(true); 
     bgwLoadFile.RunWorkerAsync(); 
    } 

    void bgwLoadFile_DoWork(object sender, DoWorkEventArgs e) 
    { 
     //simulate work 
     System.Threading.Thread.Sleep(2000); 
    } 

    void bgwLoadFile_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     if(!e.Cancelled && e.Error == null) 
      UpdateControls(false); 
    } 

    private void UpdateControls(bool isVisable) 
    { 
     if (isVisable) 
     { 
      pictureBox1.BringToFront(); 
      picLoading.BringToFront(); 
      label1.BringToFront(); 
     } 
     else 
     { 
      pictureBox1.SendToBack(); 
      picLoading.SendToBack(); 
      label1.SendToBack(); 
     } 
    } 
} 

如果你想要做的就是讓這三個控件顯示僅在BackgroundWorker的是積極的,你可以在UpdateControls() - 方法改成這樣:

private void UpdateControls(bool isVisable) 
{ 
    pictureBox1.Visible = isVisable; 
    picLoading.Visible = isVisable; 
    label1.Visible = isVisable; 
} 
+0

運行代碼之前,請檢查代碼是否通過在'else'中添加斷點來執行。 –

+0

是啊它的執行,但初步它沒有顯示出picturebox,標籤,儘管提供了加載圖像 BringToFront() – Ganeshja

+0

@ Ganeshja更新了我的答案,看看。 –