#c# #.net-3.5
#c# #.net-3.5
Вопрос:
Моей точкой входа в приложение Windows является конструктор Main form. Когда приложение запускается, оно запускает поток, который продолжает выполняться. Через несколько дней мое приложение выходит из строя, и всплывающее окно приложения перестает работать.
public MDIForm()
{
InitializeComponent();
AppDomain.CurrentDomain.UnhandledException = (s, e) =>
{
Exception ex = (Exception)e.ExceptionObject;
System.Diagnostics.Debug.WriteLine(ex.Message);
logtofile"MDIForm; Error; UnhandledException;" ex.Message);
logtofile("MDIForm" " StackTrace: UnhandledException: '{0}'" Environment.StackTrace);
};
Application.ThreadException = (s, ex) =>
{
Exception exc = (Exception)ex.Exception;
System.Diagnostics.Debug.WriteLine(exc.Message);
logtofile("MDIForm; Error; ThreadException; " exc.Message);
logtofile("MDIForm" " StackTrace: ThreadException: '{0}'" Environment.StackTrace);
};
}
Следующая функция вызывается из потока при запуске приложения.
private void MyFunction_RunThread()
{
try
{
while (true)
{
//My Code
Application.DoEvents();
Thread.Sleep(200);
}
}
catch (Exception Ex)
{
//My Code
}
}
После добавления кода для Stacetrace записывается следующий ссылочный журнал.
MDIForm StackTrace: UnhandledException: '{0}' at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at MyApp.MDIForm.<.ctor>b__0(Object s, UnhandledExceptionEventArgs e)
at System.Windows.Forms.UnsafeNativeMethods.IntCreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
at System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.Application.MarshalingControl..ctor()
at System.Windows.Forms.Application.ThreadContext.get_MarshalingControl()
at System.Windows.Forms.WindowsFormsSynchronizationContext..ctor()
at System.Windows.Forms.WindowsFormsSynchronizationContext.InstallIfNeeded()
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.DoEvents()
at MyApp.MyClass.MyFunction_RunThread()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Комментарии:
1. вам следует изучить асинхронное программирование (но, я думаю, это не решит вашу проблему)
2. Я не вижу сообщения об исключении, только трассировку стека. Кроме того, хотя мы знаем, что оно не было обработано, мы также не знаем тип исключения. У вас есть эта информация. (Если нет, вам может потребоваться снова запустить его на несколько дней.)
3. Спасибо, Денис и Скотт
4. Приложение на основе TCP-связи. У которого есть поток MyFunction_RunThread(), он запускается после установления связи. Это приложение резко вылетает