C# BackgroundWorker跳过DoWork直接进入RunWorkerCompleted的解决方法

3

我刚接触C#,请多指教!

目前为止,我有一个控制台应用程序,可以监听客户端连接并相应地回复客户端。

我还有一个带有按钮和文本框的WPF表单。该按钮启动一些代码作为BackgroundWorker连接到服务器,然后等待响应,然后将其附加到文本框的末尾。

这个方法很好,一次或两次都没问题。但是它总是崩溃 - 原来DoWork块根本没有被调用,直接进入RunWorkerCompleted。当然,结果为空,因此尝试将其转换为字符串会失败。

这是一个新手错误吗?我已经尝试在互联网上搜索了以上内容的各种方式,但没有找到任何有用的信息...

到目前为止,这是我的代码:http://pastebin.com/ZQvCFqxN - 由于我试图找出到底出了什么问题,所以有很多调试输出。

这是调试输出的结果:http://pastebin.com/V412mppX

非常感谢您给予的任何帮助。谢谢!

编辑:相关的代码后缀(感谢下面的Patrick Quirk)如下:

public void dorequest(string query)
{
    request = new BackgroundWorker();
    request.WorkerSupportsCancellation = true;
    request.WorkerReportsProgress = true;
    request.ProgressChanged += request_ProgressChanged;
    request.DoWork += request_DoWork;
    request.RunWorkerCompleted += request_RunWorkerCompleted; 
    request.RunWorkerAsync(query);
}
1个回答

7
您在调用RunWorkerAsync之后附加了DoWork处理程序。请将它们交换位置,问题就会得到解决。
另外,在以后的提问中,请将代码粘贴在问题中,而不是使用外部网站。并且尽可能提供最小限度展示问题的代码。这让我们和可能遇到相同问题的人更容易理解。

也许你可以将你的补充说明作为评论发布? - Patrick
我已将其粘贴到原始请求中 - 这应该足够帮助其他遇到类似问题的人了。 - mr_man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接