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