我在類別庫裡面用一個Timer去補捉一個方法的執行時間是否過長,如果過長就報錯,但是線程裡面的異常,無法拋給主程序.主程序無法補捉.有何解決方法:)大致代碼如下
class TimerState
{
public bool Start = true;
public string Process ="";
public Timer tmr;
}//監視的類
static void CheckStatus(Object state)
{
TimerState s =(TimerState)state;
if(s.Start == true)
{
thrownew Exception("MPSSO"+s.Process+"查詢操作愈時"));
}
else//
{
try
{
s.tmr.Dispose();
s.tmr = null;
}
catch
{
}
}
}//監視方法.
TimerState s = new TimerState();
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
Timer timer = new Timer(timerDelegate, s,1000, 0);
s.tmr = timer;
s.Process="小記";
//****************************
中間是要被監視的代碼//
s.Start =false;
監視完畢.
我如何才能在被監視的代碼中捕捉到監視的異常的阿.很急得阿,大家幫忙啊,多謝了
調用
class TimerState
{
public bool Start = true;
public string Process ="";
public Timer tmr;
}//監視的類
static void CheckStatus(Object state)
{
TimerState s =(TimerState)state;
if(s.Start == true)
{
thrownew Exception("MPSSO"+s.Process+"查詢操作愈時"));
}
else//
{
try
{
s.tmr.Dispose();
s.tmr = null;
}
catch
{
}
}
}//監視方法.
TimerState s = new TimerState();
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
Timer timer = new Timer(timerDelegate, s,1000, 0);
s.tmr = timer;
s.Process="小記";
//****************************
中間是要被監視的代碼//
s.Start =false;
監視完畢.
我如何才能在被監視的代碼中捕捉到監視的異常的阿.很急得阿,大家幫忙啊,多謝了
調用
解决方案 »
- 关于dll的一个问题,很迷惑很迷惑,恳请大侠点播
- C#应该怎么学, 一本书N多内容,都是讲语言的,都没有讲过窗口编程……
- C#&WinForm,当窗口FormBorderstyle=none的时候,最小化到任务栏时,点右键没有效果
- 显示回车换行,用哪个数据显示控件?
- 哪位帮忙优化一下买房的银行按揭贷款算法
- 有关msxml2.xmlhttp运用,出现网页错误问题
- c#调用C++的DLL出现的问题,急问
- 怎么保存DataGridView(显示的表是用代码写出来的)里的内容(经过修改,删除)到数据库中???
- 关于线程的问题
- panyee(快乐王子)请进>>>
- C#中的MDI窗体与子窗体显示问题?????
- 如何移动image?
在.NET中,使用了线程池的线程,如果出现异常的话,是不会抛出来的。所以不是无法捕获,而是根本没有抛出来
可以看看这里对Threading.Abort方法抛出异常的讨论:http://aowind.cnblogs.com/archive/2005/05/11/153063.aspx另外也可以参考这里的讨论:http://community.csdn.net/Expert/TopicView.asp?id=4385737
自己使用static变量来处理阿,线程开始就记录开始时间,结束时记录结束时间,中间可以使用定时器去检查,如果没有结束而且超时就报错
///***********************************************
我就是用Timer 來監測我的SQL查詢有沒有超時的啊,能給具體的代碼嗎,多謝了阿,我也用過委託和
事件來處理了,效果還是一樣,不行的:)高手幫忙啊,很急得:(
static isFail = false;
try
{
//...你要被监视的代码
}
catch (Exception ex)
{
isFail = true;
}
//*************************
ㄧ你的方法,被監視的代碼需要被執行完畢,才知道結果的啊,沒有監視的功能了,我的是要監視
指定的代碼超時,就取消報錯的阿,謝謝你的回覆的啊:)高手呢???解決了可以再加分的啊:)
这里面有位朋友提供了他的方法,说是可以,你试试看。BTW:我按我的理解试了他的方法,好像不管用,不过死马当成活马医,你自己看看吧。
static bool isFail = false;
static bool isFinish = false;
try
{
//...你要被监视的代码
//执行完成
isFinaish = true;
}
catch (Exception ex)
{
isFail = true;
}