如何编写像 WebClient 这样的异步类?
有什么方法可以保持简短,而不必对每种方法都重复?
例如,我有:
Download(string a)
Download(string a, string b)
我是否必须为其中的每一个重写 Async + Complete 方法?
非常感谢。
最佳答案
更新:
此示例适用于 winforms,我相信 OP 询问的是 asp.net。一旦我的评论得到一些反馈,我将修改我的答案。
你猜对了。我发现 .Net 中多线程代码的一种优雅方式是使用 BackgroundWorker类(class)。与在原生 C++ 中实现线程相比,它真的非常简单。
老实说,MSDN 页面上的示例可能有点难以理解,您可以这样总结(伪代码 - 可能无法编译):
private BackgroundWorker bw;
private void foobar() {
bw = new BackgroundWorker(); // should be called once, in ctor
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_Completed);
int i = 0;
bw.RunWorkerAsync(i);
}
private void bw_DoWork(object sender, DoWorkEventArgs e) {
int i = (int)e.Argument;
i++;
e.Result = i;
}
private void bw_Completed(object sender, RunWorkerCompletedEventArgs e) {
if (e.Error != null) {
MessageBox.Show(e.Error.Message);
} else {
int i = (int)e.Result;
MessageBox.Show(i.ToString());
}
}
至于将重复代码保持在最低限度,我想您可以对所有方法使用相同的后台工作程序,但您可能会拿着一把 Shiny 的大金锤进入臭代码领域。如果您只有几个方法,那么为每个操作创建事件处理程序应该不会看起来太乱。
关于c# - 如何使用最少的重复代码编写异步类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2039169/