从类调用方法

时间:2009-12-15 20:14:57

标签: c# multithreading class serial-port invoke

我正在开发一个串口通信应用程序。我写了一堂课。在串口的DataReceived事件中,我需要调用一个方法来执行一些字符串操作。我想在另一个线程中进行这些操作。

但由于我的应用程序不是来自应用程序的窗口(它只是一个类),它没有Invoke()

那么,如何在不Invoke()

的类中调用方法

由于

5 个答案:

答案 0 :(得分:4)

我是否正确理解您想要异步调用方法?如果是这样的话:

Thread.QueueUserWorkItem(myCallBack)

其中myCallBack是代表吃object并返回void的代表。请参阅MSDN,其中有一个简单的例子。

答案 1 :(得分:2)

由于您不处理UI,因此无需使用Invoke进行同步。您可以使用ThreadPoolBackgroundWorker或仅创建新的Thread来生成新主题。如果您从该线程访问可能从其他线程访问的数据,需要应用某些同步机制(例如lock或类似机制)。

简单示例:

// code in your class that reads data from serial port
string data = GetDataFromSerialPort();
ThreadPool.QueueUserWorkItem(DoSomeProcessing, data);    

private static void DoSomeProcessing(object state)
{
    string data = state.ToString();
    // process data
}

答案 2 :(得分:0)

使用System.Threading.Thread类并通过委托传递您的方法。

修改

public class MyClass
{
    var t1 = new Thread(new ThreadStart(mymethod));

    public void MyMethod() { }
    public void ExecuteMyThread() => t1.Start();
}
public class MainClass
{
    var myClass = new MyClass();
    public void Foo() => myClass.ExecuteMyThread(); // Start thread from other class
}

答案 3 :(得分:0)

您可以自己创建并运行新主题:

Thread thread = new Thread(MyBackgroundMethod);

thread.Start();

...

public void MyBackgroundMethod()
{
 ...
}

答案 4 :(得分:0)

最简单的方法是使用名称空间System.ComponentModel.BackgroundWorker中的BackgroundWorker。它使得在后台线程上管理异步操作变得容易,并且可以添加处理程序以取消,监视进度并在工作线程完成后进行响应。以下是MSDN link text

上的链接