我在其他应用程序中使用backgroundworker,之前从未遇到过这个问题。 这就是我正在做的事情。
我在设计师中有一名背景工作者。我的运行时代码中有三个backgroundworker事件。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (true)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
if (tempCpuValue >= (float?)numericUpDown1.Value || tempGpuValue >= (float?)numericUpDown1.Value)
{
soundPlay = true;
blinking_label();
}
else
{
soundPlay = false;
}
cpuView();
gpuView();
Thread.Sleep(1000);
}
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
private void Form1_Shown(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
Shown事件是在构造函数之后但在加载所有其他内容之前触发的事件。
然后我有这些属性,我调用它们:
private string CpuTextLabelProperty
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => CpuTemperature_label.Text = value), null);
}
}
get
{
return CpuTemperature_label.Text;
}
}
private Point CpuLocationLabelProperty
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => CpuTemperature_label.Location = new Point(210, 200)), null);
}
}
get
{
return CpuTemperature_label.Location;
}
}
private string GpuTextLabelProperty
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => GpuTemperature_label.Text = value), null);
}
}
get
{
return GpuTemperature_label.Text;
}
}
private Point GpuLocationLabelProperty
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => GpuTemperature_label.Location= new Point(210,100)), null);
}
}
get
{
return GpuTemperature_label.Location;
}
}
private string Label4TextProperty
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => label4.Text = value), null);
}
}
}
private NumericUpDown nud1
{
set
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => numericUpDown1 = value), null);
}
}
get
{
return numericUpDown1;
}
}
发生这种情况时的异常就行了:
return GpuTemperature_label.Location;
该行涂成绿色,我得到win32异常。此行属于GpuLocationLabelProperty。
仅当我退出我的应用程序时才会发生异常,因此这是Form1 Closing
事件:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Are you Sure you want to Exit. Click Yes to Confirm and No to continue", "WinForm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
e.Cancel = true;
}
}
我搜索了关于关闭表单以及如何关闭后台工作人员的搜索,但我不明白为什么需要这样做以及如何操作? 我有另一个应用程序,我正在使用backgroundworker,从来没有这个例外。 与这个背景工作者一起使用会有什么不同?
问题可能是我没有使用backgroundworker ProgressChanged
和RunWorkerCompleted
事件告诉并检查FormClosing
事件,如果后台工作完成了工作?
在谷歌搜索了很多东西,发现了很多东西,但我仍然不明白这个问题以及如何解决它。