怎么给线程定时呢? 我针对一个函数建立一个线程threadstart ts=new threadstart(aa)有时候aa是一个非常复杂的过程,我不喜欢无限制等下去,希望在1分钟后无聊是否结束都断掉线程,该怎么做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private class ThreadState{ private ManualResetEvent threadCompleted = new ManualResetEvent(false); private Thread thread; public bool WaitFor(int milliseconds) { if (!threadCompleted.WaitOne(milliseconds, false)) { thread.Abort(); return false; } return true; } public void SetThread(Thread thread) { this.thread = thread; } public void SetCompleted() { threadCompleted.Set(); }}// 主过程private void StartWorking() { ThreadState ts = new ThreadState(); ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), ts); if (ThreadPool.WaitFor(60000)) ; // OK! else ; // aborted!}// 线程过程private void DoWork(object state) { ThreadState ts = (ThreadState)state; ts.SetThread(Thread.CurrentThread); try { ........ } finally { ts.SetCompleted(); }} 打错一行if (ThreadPool.WaitFor(60000))应为if (ts.WaitFor(60000)) Sample code as follows:yourThread.Join( new TimeSpan( 0, 1, 0 ) ); private ManualResetEvent threadCompleted = new ManualResetEvent(false);经常在异步操作线程的时候都用到这个,这个起什么作用啊,还有那个AutoResetEvent啊,能讲讲吗netmicro(麦) http://www.rainsts.net/article.asp?id=170 Manual/AutoResetEvent 是一个信号产生器经常用于线程之间互相联系、确认对方状态一个比较生动的例子就是餐厅的厨房和大堂之间的沟通:一个小铃钟平时,这个钟处于“不响”的状态 (new XXXXResetEvent(false) 的false=不响)厨房做完一道菜了,就敲响这个钟 ( xxxx.Set() )于是等着这个钟响 ( xxxx.WaitOne() ) 的大堂就知道他们要来上菜了在编程的世界,这个钟被敲响了之后,不会随着时间自动变没声音如果是 AutoResetEvent,在有人听到钟响(即WaitOne() 返回true)的时候,自动变成没声音 (auto reset)如果是 ManualResetEvent,则无论有多少线程 WaitOne() 过了,返回true了,都不会变没声音,需要手动调用 Reset() (manual reset) 才会变没声音至于等待的那方,WaitOne() 的结果将会是一直等着这个钟响,直到超时或者线程被中断。无论如何返回,返回值表示是否听到钟响。ManualResetEvent 和 AutoResetEvent 都派生自定义了 WaitOne() 的 WaitHandle 类,顾名(wait-handle:等待-句柄)思义,它是用来等东西的一种资源,所以比较适合用来“等”就例如你的例子此外我也说说,你估计用的是WinForm吧?这样的话,叫UI线程干等1分钟的话,1分钟内所有UI事件都无法处理,所以你大概要弄个UI计时器(System.Windows.Forms.Timer),在时间到的时候调用WaitFor(0) (以我的例子来说)或者 if (!thread.Join(0)) thread.Abort(); (以愚翁的例子来说)。 在VB中的GetTempName可得到一个文件名,C#中该怎么写呢 DataGridView做的复合表头在拖动滚动条的时候会走位,怎么解决这个问题 API函数问题 用window.open打开的窗口中,有时候session变量会丢掉 C#如何实现报表的连打 [动态创建CheckBox的问题]如何取得属性 对象引用问题请教 求组合的生成算法 应该在何处处理Button的enable属性? 如何重载operator= 怎么在Image.FromFile(string)参数中写入当前目录中的文件 一个文件正在被使用,我无法打开,怎么办?
private ManualResetEvent threadCompleted = new ManualResetEvent(false);
private Thread thread;
public bool WaitFor(int milliseconds) {
if (!threadCompleted.WaitOne(milliseconds, false))
{
thread.Abort();
return false;
}
return true;
}
public void SetThread(Thread thread) {
this.thread = thread;
}
public void SetCompleted() {
threadCompleted.Set();
}
}// 主过程
private void StartWorking() {
ThreadState ts = new ThreadState();
ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), ts);
if (ThreadPool.WaitFor(60000))
; // OK!
else
; // aborted!
}// 线程过程
private void DoWork(object state) {
ThreadState ts = (ThreadState)state;
ts.SetThread(Thread.CurrentThread);
try { ........ } finally {
ts.SetCompleted();
}
}
yourThread.Join( new TimeSpan( 0, 1, 0 ) );
经常在异步操作线程的时候都用到这个,这个起什么作用啊,还有那个AutoResetEvent啊,能讲讲吗netmicro(麦)