WebClient オブジェクトがサイトから読み取っている間、プログラムがロードされていることを示すプログレス バーを取得しようとしています (ProgressStyle.Marquee を使用)。問題は、通話を開始するボタンをクリックすると、UI 全体がフリーズすることです。BackgroundWorker doWork に入れてみましたが、データがまったく取得されません。デリゲートとさまざまなスレッドオプションも試しましたが、すべて同じ問題があるようです。
私はC#にかなり慣れていないため、ほとんどの場合、Webで見つけた結果を試していますが、問題を解決できるものはありません。
私が持っているもの:
private void getInfoButton_Click(object sender, EventArgs e)
{
progressBar1.Style = ProgressBarStyle.Marquee;
getInfoButton.Enabled = false;
StreamReader reader = new StreamReader(client.OpenRead("URI here"));
while ((line = reader.ReadLine()) != null) {
// Do stuff
}
progressBar1.Style = ProgressBarStyle.Continuous;
getInfoButton.Enabled = true;
}
BackgroundWorker での私の試み
private void getInfoButton_Click(object sender, EventArgs e)
{
progressBar1.Style = ProgressBarStyle.Marquee;
getInfoButton.Enabled = false;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWord += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync("URI here");
while (bw.IsBusy)
;
progressBar1.Style = ProgressBarStyle.Continuous;
getInfoButton.Enabled = true;
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
WebClient client = new WebClient();
StreamReader reader = new StreamReader(e.Argument);
while ((line = reader.ReadLine()) != null) {
// Do stuff
}
}