应用程序突然结束! 没有任何提示,就自动结束任务了..trycatch 也不行.应用程序中使用了ThreadPool 这是什么原因 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有转到你设计的正常form去,加个变量判断一下就行了 没有,我猜,可是ThreadPool中线程,死锁的原因有个N个任务,要处理. 只有当只其中一个任务处理完成时,等待一定时间后,再次运行这个任务。也是要线程在池中时,禁止同一个任务进入线程池 。也就是 每个任务都是Key,在线程池中等待和运行的任务key唯一,用什么办法.我要有示例..谢谢了 //加入线程, 这个也是一个线程启动,间隔1分钟运行一个foreach (Task item in tasks) { if (!item.State && item.IsRun()) { ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null); } }Task 类的方法 public bool IsRun() { return DateTime.Now.TimeOfDay >= sleep; } public bool State { get { return _state; } }public void DoWork(object obj) { //当有程序调此方法时,将任务的状态改为true _state = true; if (!IsNew) { Init(); IsNew = true; } if (DoWork()) { object temp = Data(text); // text的值有设置,DoWork用于分析字符串 if (temp != null) { if (!Items.Exists(item => item.Time.Equals(temp.Time))) { Items.Add(temp); Save(temp); sleep = stock.Time.AddMinutes(6).TimeOfDay; if (Items.Count > 1) { Check(); } //通知道所有OB,产生了一条新的数据 if (Insert != null) Insert(temp); } else { sleep = DateTime.Now.AddSeconds(60).TimeOfDay; } } else { if (DateTime.Now.TimeOfDay > TimeSpan.Parse("9:36:00")) { _state = true; //此线程不必运行了 } else { _state = false; } } } else { if (Error != null) Error(msg); sleep = DateTime.Now.AddSeconds(30).TimeOfDay; _state = false; } } //加入线程, 这个也是一个线程启动,间隔1分钟运行一个foreach (Task item in tasks) { if (!item.State && item.IsRun()) { ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null); } }这块是 调试了,是Thread.Sleep() 这个方法引起了异常,是传入的参数引起错误 注册Application.Exit事件添加System.Diaglogsis.Debugger.Break();程序退出的时候会自动断点停止。然后查看调用堆栈。看看那个方法出问题了。 我准备改代码,不用ThreadPool,用Thread看看创建 List<Task> 对象, 在Task类中,定义一个Thread对象.当Task对象时,运行线程,请问这样要注意什么吗? 建议先用console程序跑下.用cmd去执行程序,就算没有catch,也会抛出异常 C#有关导出txt文件的问题 ajax页面:如何弹出提示框显示catch中的ee.Message 提示: 并不包含 的定义 listview 中怎么样从数据库中删除选中的多项的值! 对自己写的属性进行调试时,有没有代法在单步时不进入到属性里面?这样可以省去许多调试时的麻烦。详见文章内容。 100分求救!这样的虚拟目录怎么样建? 怎样使桌面的其他窗体自适应我的停泊窗口 webform中,关于继承DataGid的问题 因为线程较大,没有用线程池,我能否知道我的程序当前开了多少个线程 C# serialport write 串口死掉 Runtime的问题 水晶报表字段多了,不能分页,怎么处理
有个N个任务,要处理. 只有当只其中一个任务处理完成时,等待一定时间后,再次运行这个任务。也是要线程在池中时,禁止同一个任务进入线程池 。也就是 每个任务都是Key,在线程池中等待和运行的任务key唯一,用什么办法.我要有示例..
谢谢了
//加入线程, 这个也是一个线程启动,间隔1分钟运行一个
foreach (Task item in tasks)
{
if (!item.State && item.IsRun())
{
ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null);
}
}Task 类的方法
public bool IsRun()
{
return DateTime.Now.TimeOfDay >= sleep;
} public bool State
{
get
{
return _state;
}
}
public void DoWork(object obj)
{
//当有程序调此方法时,将任务的状态改为true
_state = true; if (!IsNew)
{
Init(); IsNew = true;
} if (DoWork())
{
object temp = Data(text); // text的值有设置,DoWork用于分析字符串 if (temp != null)
{
if (!Items.Exists(item => item.Time.Equals(temp.Time)))
{
Items.Add(temp); Save(temp); sleep = stock.Time.AddMinutes(6).TimeOfDay; if (Items.Count > 1)
{
Check();
} //通知道所有OB,产生了一条新的数据
if (Insert != null)
Insert(temp);
}
else
{
sleep = DateTime.Now.AddSeconds(60).TimeOfDay;
} }
else
{
if (DateTime.Now.TimeOfDay > TimeSpan.Parse("9:36:00"))
{
_state = true; //此线程不必运行了
}
else
{
_state = false;
}
} }
else
{
if (Error != null)
Error(msg);
sleep = DateTime.Now.AddSeconds(30).TimeOfDay; _state = false;
} }
//加入线程, 这个也是一个线程启动,间隔1分钟运行一个
foreach (Task item in tasks)
{
if (!item.State && item.IsRun())
{
ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null);
}
}
这块是
添加System.Diaglogsis.Debugger.Break();
程序退出的时候会自动断点停止。
然后查看调用堆栈。看看那个方法出问题了。
创建 List<Task> 对象, 在Task类中,定义一个Thread对象.当Task对象时,运行线程,请问这样要注意什么吗?