簡體   English   中英

C#中的backgroundworker問題

[英]Issue with backgroundworker in c#

目前,我有一個圖片框,上面有兩個項目,一個是處理gif文件,另一個是標簽。 現在,在調用backgroundworker時,我為所有三個項目(圖片框,處理gif,標簽)都調用了BringToFront()

以下是我為后台工作人員提供的代碼段

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();
    }
}

執行時無法顯示我三個項目中的任何一個。

這對我有用:

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();
        }
    }
}

如果您只想在后台工作程序處於活動狀態時才顯示這三個控件,則可以將UpdateControls()方法更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM