我正在开发一个串口通信应用程序。我写了一堂课。在串口的DataReceived
事件中,我需要调用一个方法来执行一些字符串操作。我想在另一个线程中进行这些操作。
但由于我的应用程序不是来自应用程序的窗口(它只是一个类),它没有Invoke()
。
那么,如何在不Invoke()
?
由于
答案 0 :(得分:4)
我是否正确理解您想要异步调用方法?如果是这样的话:
Thread.QueueUserWorkItem(myCallBack)
其中myCallBack
是代表吃object
并返回void
的代表。请参阅MSDN,其中有一个简单的例子。
答案 1 :(得分:2)
由于您不处理UI,因此无需使用Invoke
进行同步。您可以使用ThreadPool
,BackgroundWorker
或仅创建新的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
上的链接