[英]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.