关闭我的应用程序时,我有时仍会得到Win32Exception?

时间:2012-08-07 08:35:39

标签: c# backgroundworker

我在其他应用程序中使用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 ProgressChangedRunWorkerCompleted事件告诉并检查FormClosing事件,如果后台工作完成了工作?

在谷歌搜索了很多东西,发现了很多东西,但我仍然不明白这个问题以及如何解决它。

0 个答案:

没有答案