Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加带字符串的对象后,后台工作程序结果对象为空_C#_Backgroundworker - Fatal编程技术网

C# 添加带字符串的对象后,后台工作程序结果对象为空

C# 添加带字符串的对象后,后台工作程序结果对象为空,c#,backgroundworker,C#,Backgroundworker,我正在制作一个简单的WinForms程序,该程序应该可以从网站获得响应,并测量处理所需的时间 我不明白为什么执行此操作后e.Result为空:e.Result=obj 我从MSDN站点获得了web请求代码,但我不确定它是否正确实现 这用于启动后台工作程序: private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } 用于处理字

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

我不明白为什么执行此操作后
e.Result
为空:
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; }
    }
销钉法:

    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;
    }
Web请求代码

    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;
    }
编辑:这是显示的错误 我已经编辑了秒表部分。 我认为
backgroundWorker1.RunWorkerAsync()可能是问题所在。完成后,
backgroundWorker1
IsBusy
参数为True。在
RunWorkerCompleted
启动且
IsBusy
为False后立即执行


EDIT2:已解决,
backgroundWorker1\u DoWork
未在属性窗口的DoWork属性中键入。我不知道这是怎么发生的,我首先在属性窗口中生成了
backgroundWorker1\u DoWork
方法。不管怎样,它现在起作用了。谢谢你的帮助

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

检查是否有异常,并检查是否取消

另一方面,我怀疑你的
定时器
对象实际上应该是一个。
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;
}

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

检查是否有异常,并检查是否取消

另一方面,我怀疑你的
定时器
对象实际上应该是一个。
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;
}

当出现异常时,读取
e.Result
将抛出该异常。@Henkholtman True-但不清楚“it's null”是否意味着他得到了一个NullReferenceException或读取了null的值…感谢您的信息!我忘了提到我在label1.Text=test.Request+test.Time得到了NullReferenceException;正在运行的工作已完成method@imot01调试时-是“test”变量为null,还是label1?@Henk Holterman它不是。没有诸如e.Error和e.canceledReading
e.Result
之类的方法,出现异常时将抛出该异常。@Henkholtman True-但不清楚“它是否为null”“意味着他得到了一个NullReferenceException或者读取了null的值……谢谢你的信息!我忘了提到我在label1.Text=test.Request+test.Time得到了NullReferenceException;正在运行的工作已完成method@imot01调试时,“test”变量是null还是label1?@Henk Holterman它不是。没有e.Error和e.cancelled这样的方法。你能更好地描述实际问题吗?有什么例外?Linennumber?你的整个
webRespones()
可以由对
WebClient.DownloadString()
的一次调用替换。在RunWorkerCompleted方法中,异常为NullReferenceException,位于
label1.Text=test.Request+test.Time;
,然后使用调试器。您的代码有几个问题,但没有一个会在此处生成
null
(继续).Completed开始时的messagebox出现了吗?并检查
label1
。您能更好地描述实际问题吗?例外情况是什么?Linennumber?您的整个
webRespones()
可以被对
WebClient.DownloadString()的一次调用所取代
异常为NullReferenceException,位于RunWorkerCompleted方法中的
label1.Text=test.Request+test.Time;
,然后使用调试器。您的代码有几个问题,但没有一个问题会在此处产生
null
(此处继续)。完成开始时的消息框是否显示?请检查
label1