2009-12-15 72 views
1

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

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

那么,如何在没有Invoke()方法的类中调用方法?

谢谢

回答

0

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

编辑:

class Myclass 
{ 

System.Threading.Thread t1 = new System.Threading.Thread(new ThreadStart(mymethod)); 

public void mymethod() 
{ 
// do something here 
} 

public void ExecuteMyThread() 
{ 
t1.Start(); 
} 

} 

class MainClass 
{ 
Myclass mycl = new Myclass(); 

public static void Main(string args) 
{ 
// start my thread from other class 
mycl.ExecuteMyThread(); 
} 
+0

你能解释一下吗?谢谢 – UnforgivenX 2009-12-15 20:20:21

4

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

Thread.QueueUserWorkItem(myCallBack) 

其中myCallBack是代表吃一个object和返回void。参见MSDN甚至有一个简单的例子。

0

你可以自己创建并运行一个新的线程:

Thread thread = new Thread(MyBackgroundMethod); 

thread.Start(); 

...

public void MyBackgroundMethod() 
{ 
... 
} 
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 
} 
0

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