gpt4 book ai didi

c# - 添加带有字符串的对象后,后台工作人员结果对象为空

转载 作者:行者123 更新时间:2023-11-30 20:58:10 24 4
gpt4 key购买 nike

我正在制作一个简单的 WinForms 程序,它应该从网站获得响应并测量处理所需的时间。

我不明白为什么 e.Result 在执行此操作后为空:e.Result = obj;

我从 MSDN 站点获得了 Web 请求代码,但我不确定它是否正确实现。

这是为了启动后台 worker :

    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(); 可能是问题所在。完成后,backgroundWorker1IsBusy 参数为True。在 RunWorkerCompleted 启动并且 IsBusy 为 False 之后立即

EDIT2:已解决,backgroundWorker1_DoWork 未在属性窗口的 DoWork 属性中键入。我不知道这是怎么发生的,我首先在属性窗口中生成了 backgroundWorker1_DoWork 方法。无论如何,它现在有效。感谢所有的帮助!

最佳答案

如果在 DoWork 处理程序期间发生异常或操作被取消,则 RunWorkerCompleted 中的 e.Result 属性将为 null,但如果发生错误,获取它应该引发 TargetInvocationException

检查 e.Error查看是否有异常,e.Cancelled检查取消。

附带说明一下,我怀疑您的 Timer 对象实际上应该是一个 Stopwatch . Timer 类用于安排事件运行,而不是测量时间。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
TestObject obj = new TestObject();
obj.Request = webResponse();
stopwatch.Stop();
obj.Time = stopwatch.Ellapsed.ToString();
e.Result = obj;
}

关于c# - 添加带有字符串的对象后,后台工作人员结果对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com