0

C# プログラムでデータを取得するために使用しているWunderground予測に問題があります。

クリックしてデータを取得すると、すべてが正常に機能しますが、ボタンをもう一度押すと、次のエラーが発生します。 バックグラウンドワーカー

これが私のコードです:

        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 に答える