C# 后台工作人员没有做任何事情

C# 后台工作人员没有做任何事情,c#,text,label,backgroundworker,C#,Text,Label,Backgroundworker,我有一个程序,我想检查用户机器的现有内部IP,然后在连接到VPN后检查新的内部IP。我使用后台工作程序检查用户的IP是否已更改。这是我拥有的以下代码: var worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerAsync(); void worker_DoWork(obj

我有一个程序,我想检查用户机器的现有内部IP,然后在连接到VPN后检查新的内部IP。我使用后台工作程序检查用户的IP是否已更改。这是我拥有的以下代码:

        var worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker.RunWorkerAsync();


        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            while (Connection.CheckForInternetConnection()) //Makes sure an internet connection is available
            {
                CurrentInternalIP = GetIPAddress(); //Regularly retrieve the current IP so we can compare against the old IP
                if (CurrentInternalIP != OldInternalIP) //Compare the current IP address with the old one
                {
                    MessageBox.Show("IP has changed");//Make sure the event is working correctly
                    break;
                }
            }
        }

        void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            lblStatus.Text = "Connected to VPN.";
        }

现在worker\u DoWork事件工作正常。但是,一旦worker\u DoWork事件中的IP发生更改,worker\u ProgressChanged事件不会更改标签的文本。最初,我的代码用于在worker_DoWork事件中更改标签的文本,但是这给了我一个错误,因为我访问的标签不是创建标签的UI,所以这是不可能的。非常感谢您的帮助。

查看您的代码,您已将工作人员的
DoWork
事件分配给
worker\u DoWork
EventHandler,但您尚未分配
ProgressChanged
。为了引发此事件,您必须设置为
true
,才能使其正常工作,您必须分配进度更改的EeventHandler,这可以通过以下方式完成:

 worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
 worker.WorkerReportsProgress = true;
并且,您可以调用以下方法来触发进度更改事件:

worker.ReportProgress(intPercent);// intPercent is an integer denotes the percentage

查看您的代码,您已将工作人员的
DoWork
事件分配给
worker\u DoWork
EventHandler,但到目前为止尚未分配
ProgressChanged
。为了引发此事件,您必须设置为
true
,才能使其正常工作,您必须分配进度更改的EeventHandler,这可以通过以下方式完成:

 worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
 worker.WorkerReportsProgress = true;
并且,您可以调用以下方法来触发进度更改事件:

worker.ReportProgress(intPercent);// intPercent is an integer denotes the percentage

worker.ReportProgress(…)
您的代码正在执行“工作”,因此只有您才能知道进度是什么以及何时报告。
worker.ReportProgress(…)
您的代码正在执行“工作”,因此只有您才能知道进度是什么以及何时报告。唉,我一直在看错误的地方。谢谢你的回答。但是,我在尝试报告进度时遇到以下错误:“此后台工作程序声明它不报告进度。”@Harry:add
worker.WorkerReportsProgress=true在初始化过程中,请参阅更新感谢我找到的帮助。唉,我一直在看错误的地方。谢谢你的回答。但是,我在尝试报告进度时遇到以下错误:“此后台工作程序声明它不报告进度。”@Harry:add
worker.WorkerReportsProgress=true在初始化过程中,请参阅UpdatesHanks,以获取我找到的帮助。