线程块中的成员用法ui

时间:2015-03-04 12:14:32

标签: c# wpf multithreading user-interface block

我有一个包含ClassA类型成员的类。 ClassA类提供了一个耗时的方法DoWork()。我想在一个线程中调用此方法。让我们假设MainClass类是wpf应用程序的视图模型,应用程序有一个按钮。单击该按钮时,将调用Call_DoWork()方法。这是我的代码:

public class MainClass {
    private classA _classA;

    public MainClass() {
        _classA = new ClassA();
    }

    public void Call_DoWork() {
        Thread t = new Thread(() => { _classA.DoWork(); });
        t.Start();
    }
}

public class ClassA {
    public void DoWork() {
        // Do some time consuming things ...
    }
}

当我运行应用程序并单击按钮时,线程阻止了gui。这是因为线程使用_classA成员。如果_classA成员在线程中被实例化,则gui不会被阻止,一切都很好。

我的问题:是否有另一种方法在线程中使用_classA成员而不阻止gui?

提前致谢

修改

我必须使用VS2010,目标框架是.NET 3.5。

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用BackgroundWorker Class

它易于使用,而且它的好处是ProgressChanged方法正在WPF应用程序的主UI线程上执行,因此您可以在后台执行期间使用它来更新UI。 / p>