老問題了,還沒解決。情況如下:
C# code
namespace TestSystem
{
public class ClsMain
{
static void Main(string[] args)
{
//異常處理
try
{
Application.Run(new frmMain());
}
catch (Exception ex)
{
WriteError(ex.ToString(), "ProjectStartError");
}
}
}
frmMain窗體裡面用到了好幾個線程,還有socket通信(多線程加異步通信,主要是接收數據),在每個線程調用的方法中都是做了錯誤處理,socket也是做了錯誤處理。在單機環境下面,就是說沒有任何客戶端會發送數據過來。每個線程還是在運行的實現一個功能的。
程序在運行了7,8個小時後,出現了如下錯誤日志,因為是上面捕做到的錯誤,程序就死了。
錯誤日志如下:
2010-06-01 04:53:52[ProjectStartError] desc:System.ObjectDisposedException: ObjectDisposedException
at System.Threading.WaitHandle.CheckResultInternal(Boolean r)
at System.Threading.EventWaitHandle.Set()
at System.Windows.Forms.Control.TASK.MarkDone()
at System.Windows.Forms.Control.TASK.Invoke()
at System.Windows.Forms.Control._InvokeAll()
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.ContainerControl.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at TestSystem.ClsMain.Main(String[] args)
不知道哪位有好的建議來捕做到具體是哪個環節(方法)出現了問題,或者能從上面的錯誤估計是什麼情況造成的。路過的大俠幫忙看看,不知道的也請幫忙頂一下,謝謝各位了。
可能的原因之一:
比如你有一個接收線程,在拿到數據後嘗試著更新界面(比如一個TextBox),但如果這個界面(Form)已經被關閉銷毀了,那麼ObjectDisposedException就會拋出。
線程的資源有沒有進行釋放呢?
可能是內存沒有得到釋放,越累計越多
最終導致崩潰
什麼引發了ObjectDisposedException
你在使用invoke之前可以判斷你invoke控件是否已經disposed,即控件的disposed屬性