线程调用方法,如何判断该方法正在执行

ttiimm11 2011-04-02 12:27:47
我在Winform的窗体A内开启了一个线程

线程中间调用了一个窗体A的一个方法(该方法比较的浪费时间),线程跑到那个方法的时候就在等待方法执行完毕,然后才继续。我不想让线程等待方法的执行完毕,想实现这样的功能:


Thread

if(A.longTimeWork is busy) //判断那个费时间的方法是否正在执行
{
//如果正在执行,线程就做其他事情
doOtherWork();
}
else
{
//否则就执行A的费时间的方法
A.longTimeWork();
}

虚心求教该如何实现?谢谢!
...全文
354 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttiimm11 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 colinfang2006 的回复:]

设置一个全局变量查看下就可以了吧
[/Quote]
请问如何设置变量?要查看什么?
636f6c696e 2011-04-06
  • 打赏
  • 举报
回复
设置一个全局变量查看下就可以了吧
ttiimm11 2011-04-06
  • 打赏
  • 举报
回复
自己顶一下
ttiimm11 2011-04-02
  • 打赏
  • 举报
回复
回楼上我就是不想浪费时间
我这样做可以吗?

private MethodInvoker frmAlongTimeWork;
frmAlongTimeWork=new MethodInvoker(A.longTimeWork)
frmAlongTimeWork.BeginInvoke(null,null);
doOtherWork();
机器人 2011-04-02
  • 打赏
  • 举报
回复
用这个 Thread.Join(等待的时间) (单位毫秒)

比如:
       Thread thread = new Thread(DoSomeWork);
thread.Start();
if(thread.Join(100)) //等待100毫秒,看看工作是否结束
{
//结束
}
else
{
//没结束
}
ttiimm11 2011-04-02
  • 打赏
  • 举报
回复
焦点问题是,我不知道该如何判断那个费时间的方法是否正在运行。
Joop_Song 2011-04-02
  • 打赏
  • 举报
回复
那个费时间的方法应该再起一个线程,当需要的时候就调用一下。。
ttiimm11 2011-04-02
  • 打赏
  • 举报
回复
如果我4楼的方法是可行的,我做了这样一个测试
doOtherWork()里就一行函数 执行i++,看这个线程在一定时间内跑了多少个循环。
下面的代码在10秒 i=30;

private MethodInvoker frmAlongTimeWork;
frmAlongTimeWork=new MethodInvoker(A.longTimeWork)
frmAlongTimeWork.BeginInvoke(null,null);
doOtherWork();


下面的代码 10秒 i=30;

//private MethodInvoker frmAlongTimeWork;
//frmAlongTimeWork=new MethodInvoker(A.longTimeWork)
//frmAlongTimeWork.BeginInvoke(null,null);
A.longTimeWork();
doOtherWork();


而下面的代码 10秒 i=100;

//private MethodInvoker frmAlongTimeWork;
//frmAlongTimeWork=new MethodInvoker(A.longTimeWork)
//frmAlongTimeWork.BeginInvoke(null,null);
doOtherWork();


而我希望的效果是 i=100; 为什么异步调用的时候,还会影响到i++??
mcgtts 2011-04-02
  • 打赏
  • 举报
回复
sadas

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
ycproc 2011-04-02
  • 打赏
  • 举报
回复

IAsyncResult ar //异步状态
Daqing 2011-04-02
  • 打赏
  • 举报
回复
也可以
Invoke(doOtherWork)
机器人 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ttiimm11 的回复:]
回楼上我就是不想浪费时间
我这样做可以吗?

C# code

private MethodInvoker frmAlongTimeWork;
frmAlongTimeWork=new MethodInvoker(A.longTimeWork)
frmAlongTimeWork.BeginInvoke(null,null);
doOtherWork();
[/Quote]

可以啊。。。完全没问题。Delegate.BeginInvoke就是异步调用。
Daqing 2011-04-02
  • 打赏
  • 举报
回复
BeginInvoke(方法名)

方法可以的,线程的主要作用是多个实例同时运行,如果你没这个要求,那就用begininvoke,它属于委托!

111,094

社区成员

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

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

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