多线程问题:多线程过程的参数与返回值
在基于控件开发多线程应用过程中要分清各自的线程,ui线程控制响应用户操作和界面变化,如果用ui线程执行其他操作,那么界面接回卡住。那么其他操作就应该另启线程进行运行,然而线程之间经常需要参数传递,比如把其他操作的参数显示到界面上,这时就要搞清楚什么操作由哪条线程控制。
在多线程应用程序中提供和返回值是很复杂的,因为必须将对某个过程的引用传递给线程类的构造函数,该过程不带参数也不返回值。
为多线程过程提供参数 :
为多线程方法调用提供参数的最好办法是将目标方法包裹在类中,并为该类定义字段,这些字段将被用作新线程的参数。这种方法的优点是,任何时候想要启动新线程,都可以创建类的新实例,该实例带有自身的参数。如
Socket client=xxx;
ClientThread newclient= new ClientThread(client);
Thread newthread= new Thread(new ThreadStart(newclient.ClientService));
//这里可以对多线程自带参数初始化,也可以在类构造函数中初始化
newthread.Start();
class ClientThread{
//放置线程自带参数
public Socket service;
public ClientThread(Socket clientsocket)
{
//把传进来的参数对象传给自带参数
This.service=clientsocket;
}
}
从多线程过程返回值:
返回值的方法一共有四种(来自百度)最简单的是使用 BackgroundWorker 组件来管理线程,在任务完成时引发事件,然后用事件处理程序处理结果。如果要对多线程进行更细致的控制,就要用Thread