关于线程调用

wumingguoguo 2010-05-24 07:39:11
请教一下,C# 中的MethodInvoker零返回、零参数,有没有其它类似的类可以有返回值或带参数?
...全文
97 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bubble_baby 2010-05-27
  • 打赏
  • 举报
回复
如果单纯想做一个提示界面,费时操作没有必要放在单独的线程中,费时操作还是按照主线程执行,而是把提示界面的显示放在单独的线程中就可以了,由于费时操作在主线程中,可以确保执行完后获得返回值。
wumingguoguo 2010-05-26
  • 打赏
  • 举报
回复
这么说吧,我想做一个“系统正在执行”的提示框,主线程执行费时操作时就显示出来,费时操作结束就自动关闭,然后继续执行主线程。

麻烦哪位给贴个完整代码吧,不胜感激。。。
wumingguoguo 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huohuli008 的回复:]

Func<T1,T2,T3,TResult> MS已经定义好的委托,可以支持最到16个参数,最后一个返回值
[/Quote]

委托确实有返回值,但是在执行的时候由于辅助线程费时,主线程向下执行,还是得不到所要的值。。。
huohuli008 2010-05-25
  • 打赏
  • 举报
回复
Func<T1,T2,T3,TResult> MS已经定义好的委托,可以支持最到16个参数,最后一个返回值
wumingguoguo 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiaozhi_5638 的回复:]

LZ的意思是想线程结束后 返回一个执行结果不是?
将method函数封装在一个类中
class A
{
public void method()
{
//……操作a
}
public int a;
}
A temp=new A();
Thread thread=new Thread(new ThreadStart(temp.method));
t……
[/Quote]

谢谢你的提示,我试了一下,由于主线程和辅助线程完成时间不确定,而辅助线程执行费时操作,主线程取到的标志位往往没有被辅助线程更改,然后我在主线程里加了个while(! flag) { Thread.Sleep(500)},达到了取值的要求,但是辅助线程执行时有个“正在执行”的提示框,循环造成“正在执行”提示框界面的假死,正在想办法解决这个问题,烦请各位给点意见,谢谢。。。
uc_xkj1 2010-05-24
  • 打赏
  • 举报
回复
接个分
wuyq11 2010-05-24
  • 打赏
  • 举报
回复
MethodInvoker是一个不带参数的异步调用对象,若要带参数,可用delegate实现
参数定义成全局变量
请叫我卷福 2010-05-24
  • 打赏
  • 举报
回复
LZ的意思是想线程结束后 返回一个执行结果不是?
将method函数封装在一个类中
class A
{
public void method()
{
//……操作a
}
public int a;
}
A temp=new A();
Thread thread=new Thread(new ThreadStart(temp.method));
thread.Start();

//执行完后,就可以用temp.a了
wumingguoguo 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xray2005 的回复:]

不明白你为什么要返回参数呢?

如果说,你要根据返回的参数进行其他的处理。

那你可以申明一个类似全局的变量。

然后在你的 my方法里面改变这个变量的值。

最后,其他的方法根据这个变量再进行下面的处理就是了。
[/Quote]

我还需要根据返回的参数判断进行下一步操作,但是如果用全局变量的话在主线程里面获取不到这个值,主线程里面的标志位没有根据新创建的线程更改,所以需要返回值。。。
xray2005 2010-05-24
  • 打赏
  • 举报
回复
不明白你为什么要返回参数呢?

如果说,你要根据返回的参数进行其他的处理。

那你可以申明一个类似全局的变量。

然后在你的 my方法里面改变这个变量的值。

最后,其他的方法根据这个变量再进行下面的处理就是了。
yuyingying1986 2010-05-24
  • 打赏
  • 举报
回复
你自己定义委托不就行了?
wumingguoguo 2010-05-24
  • 打赏
  • 举报
回复
// 摘要:
// Represents a delegate that can execute any method in managed code that is
// declared void and takes no parameters.
public delegate void MethodInvoker();


我说的是MethodInvoker(),不是Invoke。。。 。。。


private void method(){。。。}

MethodInvoker my = method;
Thread thred = new Thread(new ThreadStart(my));
thred.Start();这是我写的,但是不好用,不能返回参数,请教一下有没有其它的方法跨线程访问,谢谢。。。
捷哥1999 2010-05-24
  • 打赏
  • 举报
回复
public abstract Object Invoke(
Object thisob,
Object[] parameters
)


有返回的呀!
返回的是object类型的,你需要自己转型。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧