WinForms
Web サイトからの応答を取得し、処理に必要な時間を測定する簡単なプログラムを作成しています。
e.Result
これを行った後、なぜnullなのかわかりません:e.Result = obj;
MSDN サイトから Web 要求コードを取得しましたが、正しく実装されているかどうかわかりません。
これは、バックグラウンド ワーカーを開始するためのものです。
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
文字列を処理するクラス:
public class TestObject
{
public string Request { get; set; }
public string Time { get; set; }
}
DoWork メソッド:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
TestObject obj = new TestObject();
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
obj.Request = webResponse();
stopwatch.Stop();
obj.Time = stopwatch.Elapsed.ToString();
e.Result = obj;
}
RunWorkerCompleted メソッド:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
TestObject test = e.Result as TestObject;
label1.Text = test.Request + test.Time;
}
ウェブリクエストコード
private string webResponse()
{
// Create a request for the URL.
WebRequest request = WebRequest.Create("http://www.tvz.hr");
// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Display the status.
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
編集: これは表示されるエラーですhttp://i.imgur.com/Sb5BDFe.jpg
ストップウォッチの部分を編集しました。それが問題になる可能性があると思いますbackgroundWorker1.RunWorkerAsync();
。完了すると、のIsBusy
パラメーターbackgroundWorker1
は True になります。RunWorkerCompleted
そして開始直後IsBusy
はFalse
EDIT2: 解決済み、[プロパティ]backgroundWorker1_DoWork
ウィンドウの DoWork プロパティに入力されませんでした。それがどのように起こったのかわかりませんbackgroundWorker1_DoWork
。最初にプロパティウィンドウでメソッドを生成しました。とにかく、それは今動作します。すべての助けに感謝します!