社区
C#
帖子详情
使用多线程时,怎样指定一个带参数的方法作为ThreadStart()的参数?
xueyhfeng
2005-07-25 10:25:33
如题,如果我使用 Thread thd1 = new Thread(new ThreadStart(Query));来创建线程,那么当这个Query方法带有参数时,会编译失败,说是委托(delegate)与Query不符,该怎么办?
...全文
746
6
打赏
收藏
使用多线程时,怎样指定一个带参数的方法作为ThreadStart()的参数?
如题,如果我使用 Thread thd1 = new Thread(new ThreadStart(Query));来创建线程,那么当这个Query方法带有参数时,会编译失败,说是委托(delegate)与Query不符,该怎么办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xueyhfeng
2005-07-25
打赏
举报
回复
恩,楼上的方法可行,不过,似乎需要在QueryA()中做额外的判断,我现在用ThreadPool解决了问题,感谢两位,
fxyfx
2005-07-25
打赏
举报
回复
Main()中
Query q1=new Query("ad","dd","dd"...);
Query q2=new Query("cc","cc","cc"...);
Query q3=new Query("ee","ee","ee"...);
Query q4=new Query("11","22","33"...);
类Query中
QueayA()
{
//例如执行操作aa
aa(str1,str2,str3.......);
//例如执行操作bb
bb(str10,str20,str30...);
...............
}
xueyhfeng
2005-07-25
打赏
举报
回复
楼上的方法刚才试了,
因为我要同时启动多个线程来执行操作,而且这些线程需要不同的参数,如果用楼上的方法,那么存在线程同步的问题,似乎是主线程先执行,然后所有创建出来的线程都得到了相同的数据,
fxyfx
2005-07-25
打赏
举报
回复
class Query
{
private string str1;
……参数
public Query(string a,string b,string c......)
{
str1=a;
...........
}
public void QueryA
{
.....................
}
}
void Main()
{
Query q1=new Query("ad","dd","dd"...);
...
Thread th1=new Thread(new ThreadStart(Query.QueryA);
...........
}
firstsee
2005-07-25
打赏
举报
回复
如果你的线程在创建的同时就会启动并执行的话,建议使用
ThreadPool.QueueUserWorkItem(new WaitCallback(Query),state);
这样你就可以把所有的参数放在state中了。
lm517
2005-07-25
打赏
举报
回复
mark
c#
多线程
调用
带
参数
函数
线程操作主要用到
Thre
ad类,他是定义在System.
Thre
ading.dll下。
使用
时
需要添加这
一个
引用。该类提供给我们四个重载的构造函数(以下引自msdn)。
Thre
ad (Parameterized
Thre
adS
tar
t) 初始化
Thre
ad 类的新实例,
指定
允许对象在线程启动
时
传递给线程的委托。
Thre
ad (
Thre
adS
tar
t) 初始化
Thre
ad 类的新实例。
thre
ads
tar
t
一个
参数
和两个
参数
thre
ads
tar
t
一个
参数
和两个
参数
,
一个
是静态执行,
一个
是实例执行 Visual C++ using namespace System; using namespace System::
Thre
ading; ref class Work { public: static void DoWork() { Console::Wri
带
参数
线程的操作(Parameterized
Thre
adS
tar
t,
Thre
adS
tar
t)
带
参数
线程的操作 线程操作主要用到
Thre
ad类,他是定义在System.
Thre
ading.dll下。
使用
时
需要添加这
一个
引用。该类提供给我们四个重载的构造函数(以下引自msdn)。
Thre
ad (Parameterized
Thre
adS
tar
t) 初始化
Thre
ad 类的新实例,
指定
允许对象在线程启动
时
传递给线程的委托。
Thre
ad (
Thre
adS
tar
t
以
Thre
adS
tar
t方式实现
多线程
三、以
Thre
adS
tar
t方式实现
多线程
3.1
使用
Thre
adS
tar
t委托 这 里先以
一个
例子体现一下
多线程
带
来的好处,首先在Message类中建立
一个
方法
ShowMessage(),里面显示了当前运行线程的Id,并
使用
Thre
ad.Sleep(int )
方法
模拟部分工作。在main()中通过
Thre
adS
tar
t委托绑定Message对象的ShowMessage()
方法
,
Thre
adS
tar
t中如何
带
参数
1.
Thre
adS
tar
t 线程执行
带
参数
的
方法
,new
Thre
ad(new
Thre
adS
tar
t(delegate {
Thre
adTask(firstPage, lastPage); })); 2.System.
Thre
ading.Parameterized
Thre
adS
tar
t 其实没有必要,
Thre
adS
tar
t本来就是个委托,里面又来了个匿名
方法
。多了一次
方法
的调用,虽
C#
111,129
社区成员
642,532
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章