0

我使用Wunderground预测在 c# 程序中检索数据时遇到问题。

一旦一切正常,当我单击以检索数据但再次单击按钮时,我收到此错误: 后台工作者

这是我的代码:

        private void bweather_DoWork(object sender, DoWorkEventArgs e)
        {
            string lat = Math.Round(deciLat).ToString();
            string lng = Math.Round(deciLon).ToString();
            string latlong = String.Format("{0},{1}", lat.Replace(',', '.'), lng.Replace(',', '.'));

            //Initialize Current as a new Day
            dow.Current = new WeatherLib.WDay();

            //Using Wunderground as the provider we populate the property with current data for the latlong entered into the textbox
            try
            {
                dow = WeatherLib.WProvider.Wunderground(latlong);
                writeToLogFile("Retrieve weather info successfully on: " + latlong);
            }
            catch (Exception ex)
            {
                writeToLogFile(ex.Message);
            }
        }

这是刷新按钮:

 private void weather_refresh_Click(object sender, EventArgs e)
        {
            writeToLogFile("Weather button pressed");
            weather_descripton.Clear();
            weather_speed_textbox.Clear();
            weather_tem_textbox.Clear();
            weather_rain_text.Clear();
            weather_wind_dir_textbox.Clear();
            weather_descripton.AppendText("Searching.......");
            if (!bweather.IsBusy)
            {
                bweather.CancelAsync();
            }
            bweather.RunWorkerAsync();
        }

以下是事件处理程序:

// Weather handlers
            bweather.WorkerSupportsCancellation = true;
            bweather.DoWork += bweather_DoWork;
            bweather.RunWorkerCompleted += bweather_RunWorkerCompleted;

知道为什么这不能正常工作吗?

谢谢

4

1 回答 1

2

那么错误消息表明您正在尝试多次使用相同的后台工作人员。

如果它仍然很忙,您会要求它取消,但这并不意味着它会立即取消。据我所知,BackgroundWorker代码甚至没有检查它是否被取消,这意味着取消它不会真正实现任何有用的东西。

我建议如果它很忙,你应该忽略这个请求。实际上,最好在开始操作时完全禁用该按钮,并仅在操作完成后重新启用它。

于 2012-08-18T11:12:11.510 回答