Приложение перестало отвечать

#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(), он запускается после установления связи. Это приложение резко вылетает

5. ссылка на изображение сбоя приложения