0

我有一个类,其中包含大约十几个方法。大多数方法执行和完成都相当快。然而,有时两种方法可能需要相当长的时间才能完成。所以环顾四周,我想我想在 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 的类的编码器实例中运行这两个冗长的方法?

4

2 回答 2

0

BackgroundWorker 是一个类,可用于在单独的线程上执行单个方法。在我看来,这是一种为初学者使用线程的简单方法。

从您的要求来看,您希望异步运行需要很长时间的方法。

我通常使用代表和 BeginInvoke 来执行此操作,因为我已经习惯了,而且我的商店最近才迁移到 .Net 4.0。

Dimitar 使用任务的答案可能是更简单的方法。祝你好运。

于 2013-05-30T04:07:46.917 回答
0

也许你可以制作你的方法asyncawait结果,比如:

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 ....
    }
}

这里有更多信息。

于 2013-05-30T04:03:20.450 回答