Bardzo dziwny problem z wyjątkami i debugowaniem...

0

Witam. W uproszczeniu mój kod wygląda tak:

private void frmSettings_Load(object sender, EventArgs e)
{
      throw new Exception("wyjątek");
      label1.Text = "123";
}

Problem polega na tym że w trybie debugowania, żaden wyjątek nie jest wyrzucany a kod za nim się oczywiście nie wykonuje (czyli w tym wypadku tekst na label1 nie zmienia się). Natomiast gdy odpalam program bez debugowania, wszystko jest ok (czyli niezłapany wyjątek jest normalnie zgłaszany). Jest jeszcze jeden problem związany z powyższym. Wygląda to tak:

private void frmSettings_Load(object sender, EventArgs e)
{
      obiekt.Zdarzenie += new MyEventHandler(Zdarzenie);
}

void Zdarzenie(MyEventArgs e)
{
      label1.Text = "123";
}

Zdarzenie jest wywoływane z innego wątku niż ten w którym został utworzony label1. Więc powinien zostać zgłoszony wyjątek CrossThreadOperationException, ale nic takiego się nie dzieje. W trybie debugowania program natychmiastowo się zamyka (tak jak gdybym nacisnął przycisk Stop Debugging), natomiast przy uruchamianiu bez debugowania tekst na label1 zmienia się choć powinien być wyrzucony wyjątek... Dziwne to wszystko, nie mam pojęcia o co może chodzić. Byłbym wdzięczny za pomoc

0

Co do pierwszego problemu z wyrzucaniem wyjątku w zdarzeniu Load: właśnie przyjrzałem się temu bliżej, i okazuje się że to chyba po prostu tak ma być, że ten wyjątek nie jest zgłaszany. Można go ewentualnie przechwycić i wyświetlić w blokach try-catch (dotyczy to tylko trybu Debug i zdarzenia Load). IMO trochę to bez sensu...

Jeśli chodzi o te nieszczęsne wątki to problem nadal pozostaje nierozwiązany...

0

Po prostu zrób to jak należy z InvokeRequired i Invoke.
http://msdn.microsoft.com/en-us/library/ms171728.aspx

0

Tak zrobiłem :) Ale chodzi o to że przez to ciężko się było domyśleć gdzie jest problem.

0

W Visual Studio w zakładce Debug jest coś takiego jak opcja Exceptions, może tam masz jakieś dziwne ustawienia i dlatego wyjątki nie są zgłaszane w trybie debug. U mnie throw Exception powoduje wskoczenie w najbliższego catcha i mogę go zdebugować.
Pozdrawiam
Łukasz Gawron

1 użytkowników online, w tym zalogowanych: 0, gości: 1