Mam ten fragment kodu:.NET 4.0 - AccessViolationException i WndProc
internal class MTool : NativeWindow
{
private const int WM_LBUTTONDOWN = 0x0201;
public event TipDeactivateEventHandler Deactivate;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if(m.Msg == WM_LBUTTONDOWN)
{
if(this.Deactivate != null)
{
this.Deactivate();
}
}
base.WndProc(ref m);
}
}
Kiedy uruchomić mój program pojawia się błąd AccessViolationException na linii base.WndProc(ref m);
i nie wiem dlaczego.
Wygląda na to, że został przeniesiony z .NET 2.0 na 4.0 i moja teoria mówi, że może istnieć alternatywna metoda używana teraz zamiast nadpisywania WndProc. Czy to przypadek? Jeśli nie, dlaczego otrzymuję ten wyjątek?
Czy możesz podać bardziej kompletny przykład? Co najmniej pokazuje, jak tworzysz okno MTool i wyświetlasz je? Chcę się upewnić, że moja repro jest blisko twojej. – Tim
Więc właściwie nie pokazujesz tego konkretnego miejsca, tylko tworzysz obiekt? Czy nie potrzebujesz wywoływać CreateHandle lub czegoś podobnego, aby NativeWindow był przydatny? – Tim
Czy próbowałeś umieścić punkt przerwania na base.WndProc i sprawdzając, jaka jest wartość m, gdy zgłaszany jest wyjątek ... czy też działa dla jakiegoś m lub czy rzuca wyjątek przy pierwszym wywołaniu .. –