我正在开发一个串口通信应用程序。我写了一个类。在串口的DataReceived
事件中,我需要调用一个方法来做一些字符串操作。我想在另一个线程中进行这些操作。
但由于我的应用程序不是来自应用程序的窗口(它只是一个类),它没有Invoke()
.
那么,我怎样才能调用一个没有的类中的方法Invoke()
呢?
谢谢
我正在开发一个串口通信应用程序。我写了一个类。在串口的DataReceived
事件中,我需要调用一个方法来做一些字符串操作。我想在另一个线程中进行这些操作。
但由于我的应用程序不是来自应用程序的窗口(它只是一个类),它没有Invoke()
.
那么,我怎样才能调用一个没有的类中的方法Invoke()
呢?
谢谢
我是否正确理解您要异步调用方法?如果是这样:
Thread.QueueUserWorkItem(myCallBack)
代表在哪里myCallBack
吃饭object
和返回void
。请参阅MSDN,其中甚至有一个简单的示例。
由于您不处理 UI,因此您不需要使用Invoke
来同步。您可以使用ThreadPool
, aBackgroundWorker
或创建一个新线程来生成一个新线程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
}
使用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
}
您可以自己创建和运行一个新线程:
Thread thread = new Thread(MyBackgroundMethod);
thread.Start();
...
public void MyBackgroundMethod()
{
...
}
最简单的方法是使用位于命名空间 System.ComponentModel.BackgroundWorker 中的 BackgroundWorker。它使管理后台线程上的异步操作变得容易,并且可以添加处理程序以在工作线程完成后取消、监视进度和响应。这是 MSDN链接文本上的链接