w app WinForm, w przypadku załadować formularza, dodaj następującą linię:Ciche awarie w C#, pozornie nieobsłużone wyjątki, które nie psuje programowi
throw new Exception();
i uruchomić aplikację. Działał bez problemu. Nazywa się to cichą awarią, możesz próbować dodawać skrzynki wiadomości przed i po, a wkrótce przekonasz się, że zamiast awarii aplikacji, instrukcja throw właśnie wychodzi ze zdarzenia Load.
Jestem pewien, że nie ma potrzeby wyjaśniania, jak brzydkie i niebezpieczne jest to.
Zastanawiam się jednak nad przyczynami (prawdopodobnie z historii) tego przerażającego zachowania. Jestem pewien, że to nie jest decyzja projektowa, prawdopodobnie brak wyboru lub lenistwo. Czy ktoś wie?
Byłoby miło, gdyby ktoś mógł wskazać mi listę zdarzeń, które mogą powodować również poważne awarie.
Oto fragment mojego kodu - nie mam pojęcia jak to może pomóc - ale tutaj jest:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Form f = new Form();
f.Load += new EventHandler((x, y) => { throw new Exception(); });
Application.Run(f);
}
}
}
EDIT Wydaje się to nie wydarzyło każdemu. Używam: fw 3.5, winforms, vs 2008, vista x64, nowy czysty projekt WinForm, z kodem wspomnianym powyżej.
Czy możesz dokładniej wyjaśnić swój problem za pomocą fragmentu obsługi zdarzeń OnLoad dla twojego formularza. Masz również obsługę wyjątków UnhandledException w tej domenie aplikacji? Jeśli jest to główna forma aplikacji i nie może się załadować, ponieważ rzuciłeś nieobsługiwany wyjątek, czego się spodziewałeś? Podejrzewam, że w tym przypadku zostanie wywołany Twój nieobsłużony program obsługi zdarzeń. –
Jakiej wersji systemu Windows używasz? –
Właściwie ponownie głosowałem na twoje poprzednie pytanie, jest źle napisane i arogancko ... – Blindy