que tienen este fragmento de código:.NET 4.0 - AccessViolationException y 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);
}
}
Cuando ejecuto mi programa me sale un error en la línea de AccessViolationException base.WndProc(ref m);
y no sé qué.
Aparentemente esto se transfirió de .NET 2.0 a 4.0 y mi teoría es que puede haber un método alternativo utilizado ahora en lugar de anular WndProc. Es este caso? Si no, ¿por qué recibo esta excepción?
¿Podría proporcionar un poco más de una muestra? ¿Al menos muestra cómo estás creando la ventana de MTool y mostrándola? Quiero asegurarme de que mi repro esté cerca del tuyo. – Tim
¿De modo que no estás mostrando ningún lugar en particular, solo creando el objeto? ¿No necesita usar CreateHandle o algo así para que NativeWindow sea útil? – Tim
Ha intentado poner un punto de interrupción en la base.WndProc y viendo cuál es el valor de m cuando se produce una excepción ... también funciona alguna vez o hace una excepción la primera vez que se invoca .. –