C#多线程函数如何传参数
Threadth=newThread(newThreadStart(DownLoad));th.IsBackground=true;th.Start();privatev...
Thread th = new Thread(new ThreadStart(DownLoad));
th.IsBackground = true;
th.Start();
private void DownLoad(){ }
我现在想让委托实现参数的传递,就是:
private void DownLoad(string str){ }
如何实现呢。我有找到一个解决方法是:
MyDelegate dele = new MyDelegate (DownLoad);
DownLoad.BeginInvoke("abcd");
可是我没解决掉,有谁知道的帮帮我 。在这里多谢拉。 展开
th.IsBackground = true;
th.Start();
private void DownLoad(){ }
我现在想让委托实现参数的传递,就是:
private void DownLoad(string str){ }
如何实现呢。我有找到一个解决方法是:
MyDelegate dele = new MyDelegate (DownLoad);
DownLoad.BeginInvoke("abcd");
可是我没解决掉,有谁知道的帮帮我 。在这里多谢拉。 展开
6个回答
展开全部
你那个方法我没怎么用过
这个是我写的一个程序中线程的创建
struct
myarg{
U32
*fd;
U32
*fd_id;
U32
*qsend_msgid,*qrecv_msgid;
struct
my_msg_st
*qsend_data;
struct
my_msg_st
*qrecv_data;
};
main()
{
pthread_t
tidp_init,tidp_read,tidp_write;
my_arg.fd
=
fd;
my_arg.qrecv_msgid
=
&recv_msgid;
my_arg.qsend_msgid
=
&send_msgid;
if(pthread_create(&tidp_init,NULL,thread_fun_date,&my_arg)
!=
0)
{
printf("thread_fun_init
is
over
!\n");
}
if(pthread_create(&tidp_read,NULL,thread_fun_read,&my_arg)
!=
0)
{
printf("thread_fun_read
is
over
!\n");
}
if(pthread_create(&tidp_write,NULL,thread_fun_write,&my_arg)
!=
0)
{
printf("thread_fun_write
is
over
!\n");
}
}
void*thread_fun_read(void
*
my_arg)
{
printf("!!!!!!!
thread_fun_read
!!!!!!!!!!!!\n");
U32
i;
pthread_t
tidp;
struct
myarg
*p_my_arg,fd_myarg[UART_NUM];
p_my_arg
=
(struct
myarg
*)my_arg;
}
这个是我写的一个程序中线程的创建
struct
myarg{
U32
*fd;
U32
*fd_id;
U32
*qsend_msgid,*qrecv_msgid;
struct
my_msg_st
*qsend_data;
struct
my_msg_st
*qrecv_data;
};
main()
{
pthread_t
tidp_init,tidp_read,tidp_write;
my_arg.fd
=
fd;
my_arg.qrecv_msgid
=
&recv_msgid;
my_arg.qsend_msgid
=
&send_msgid;
if(pthread_create(&tidp_init,NULL,thread_fun_date,&my_arg)
!=
0)
{
printf("thread_fun_init
is
over
!\n");
}
if(pthread_create(&tidp_read,NULL,thread_fun_read,&my_arg)
!=
0)
{
printf("thread_fun_read
is
over
!\n");
}
if(pthread_create(&tidp_write,NULL,thread_fun_write,&my_arg)
!=
0)
{
printf("thread_fun_write
is
over
!\n");
}
}
void*thread_fun_read(void
*
my_arg)
{
printf("!!!!!!!
thread_fun_read
!!!!!!!!!!!!\n");
U32
i;
pthread_t
tidp;
struct
myarg
*p_my_arg,fd_myarg[UART_NUM];
p_my_arg
=
(struct
myarg
*)my_arg;
}
展开全部
class Params // 线程函数参数类型
{
public int inparam = 0; // 表示一个传入的值
public int outparam = 0; // 表示一个返回的值
}
var pm = new Params { inparam = 1 };
var thread = new Thread(param =>
{
((Params)param).outparam = 10;
Thread.Sleep(2000);
});
thread.Start(pm);
thread.Join();
MessageBox.Show("传出参数的值是 " + pm.outparam.ToString());
{
public int inparam = 0; // 表示一个传入的值
public int outparam = 0; // 表示一个返回的值
}
var pm = new Params { inparam = 1 };
var thread = new Thread(param =>
{
((Params)param).outparam = 10;
Thread.Sleep(2000);
});
thread.Start(pm);
thread.Join();
MessageBox.Show("传出参数的值是 " + pm.outparam.ToString());
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
启动带参数的线城 方法接受参数必须用OBJECT类型接受再转换
System.Threading.Thread HangUpthread = new Thread(new ParameterizedThreadStart(OnHangUp));
HangUpthread.Start(data);
data必须是 OBJECT类型 然后在接受里面再转换 也就是说那个函数的参数必须是OBJECT类型!
void test(object date)
说了参数必须是OBJECT类型
private void DownLoad(object str)
{
string str1=(string )str //然后里面再转换成string
}
System.Threading.Thread HangUpthread = new Thread(new ParameterizedThreadStart(OnHangUp));
HangUpthread.Start(data);
data必须是 OBJECT类型 然后在接受里面再转换 也就是说那个函数的参数必须是OBJECT类型!
void test(object date)
说了参数必须是OBJECT类型
private void DownLoad(object str)
{
string str1=(string )str //然后里面再转换成string
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你INVOKE时没用delegate啊,你到底想做什么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private void DownLoad(object objstr)
{
string str=(string)objstr
}
Thread th = new Thread(new ParameterizedThreadStart(DownLoad));
th.IsBackground = true;
th.Start(参数);
给分了吧
{
string str=(string)objstr
}
Thread th = new Thread(new ParameterizedThreadStart(DownLoad));
th.IsBackground = true;
th.Start(参数);
给分了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询