在BackgroundWorker中运行类方法

时间:2013-05-30 03:44:00

标签: c# visual-studio class methods backgroundworker

我有一个类,里面有十几种方法。大多数方法执行和完成相当快。然而,有两个方法可能需要花费相当长的时间来完成他们的课程。所以从环顾四周来看,我想我想在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中运行两个冗长的方法?

2 个答案:

答案 0 :(得分: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 ....
    }
}

Here是更多信息。

答案 1 :(得分:0)

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

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

我通常使用委托和BeginInvoke这样做,因为这就是我习惯的,我的商店最近搬到了.Net 4.0。

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