我有一个类,里面有十几种方法。大多数方法执行和完成相当快。然而,有两个方法可能需要花费相当长的时间来完成他们的课程。所以从环顾四周来看,我想我想在BackgroundWorker中运行它们。 但我还没有理解这个细节。我有点像菜鸟。
我申请的主要表格;
namespace EncodeDecode
{
public partial class EnDecoder : Form
{
CodeMachine coder = new CodeMachine();
// char[] letters = new char[94 + 33];
List<string> words = new List<string>();
}
}
public class CodeMachine
{
public bool Encode() // This takes a while
{
}
public bool Decode() // This takes a while
{
}
public bool Load() // This is quick
{
}
..... // The rest are quick too
.....
}
}
那么,如何在我的类的编码器实例中在BackgroundWorker中运行两个冗长的方法?
答案 0 :(得分:0)
也许你可以为你的结果制作方法async
和await
,如下所示:
CodeMachine coder = new CodeMachine();
// run this async and await response (will not block the UI)
// it will sort of use it as a checkpoint to continue from
await coder.EncodeAsync();
然后在你的CodeMachine
中创建一个返回结果的异步方法:
public class CodeMachine
{
// naming convention has it ending with Async
public async Task<bool> EncodeAsync()
{
// do something that takes a while here ....
}
}
Here是更多信息。
答案 1 :(得分:0)
BackgroundWorker是一个可用于在单独线程上执行单个方法的类。在我看来,它是一种为初学者使用线程的简单方法。
从您的要求看起来您希望异步运行需要很长时间的方法。
我通常使用委托和BeginInvoke这样做,因为这就是我习惯的,我的商店最近搬到了.Net 4.0。
Dimitar使用任务的答案可能是更简单的方法。祝你好运。