private void CategoryRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { var threadRepeater = (Repeater)e.Item.FindControl("_threadRepeater"); var category = (e.Item.DataItem as ThreadCategory); threadRepeater.DataSource = Threads.FindAll(t => t.CategoryID == category.ID); threadRepeater.DataBind(); } }
/// <summary> /// 停止循环工作。 /// 只能停止循环而已,如果已经有一批任务在处理, /// 则内部需要捕获ThreadAbortException异常,否则无法停止任务处理。 /// </summary> public virtual void StopWork() { NeedStopProcess = true; WriteLine("正在停止服务..."); //停止服务管理线程 StopManagerThread(); //if (threads != null && threads.IsAlive) threads.Abort(); if (Threads != null) { WriteLine("正在等待现有线程执行完毕..."); DateTime waitStart = DateTime.Now; while (waitStart.AddMinutes(10d) < DateTime.Now) { if (Threads.FindAll(t => t.IsAlive).Count() > 0) { //有执行中的线程,就继续等待,最多等待10分钟 Thread.Sleep(100); } else { WriteLine("等待超时,强行终止所有线程"); break; } } foreach (var item in Threads) { try { if (item != null && item.IsAlive) { item.Abort(); } } catch (Exception ex) { WriteLine(ex.ToString()); } } } WriteLine("服务已停止"); //Interactive.Hide(); }