Tôi có đoạn mã này:.NET 4.0 - AccessViolationException và 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);
}
}
Khi tôi chạy chương trình của tôi, tôi nhận được một lỗi AccessViolationException tại dòng base.WndProc(ref m);
và tôi không biết tại sao.
Dường như điều này đã được chuyển từ .NET 2.0 đến 4.0 và lý thuyết của tôi là có thể có một phương pháp thay thế được sử dụng thay cho WndProc. Đây có phải là trường hợp này không? Nếu không phải lý do tại sao tôi nhận được ngoại lệ này?
Bạn có thể cung cấp đầy đủ hơn một chút mẫu không? Ít nhất cho thấy cách bạn đang tạo cửa sổ MTool và hiển thị nó? Tôi muốn chắc chắn rằng repro của tôi ở gần bạn. – Tim
Vì vậy, bạn không thực sự hiển thị nó ở bất kỳ địa điểm cụ thể nào, chỉ cần tạo đối tượng? Bạn không cần phải gọi CreateHandle hoặc một cái gì đó như thế cho NativeWindow là hữu ích? – Tim
Bạn đã thử đặt một breakpoint trên base.WndProc và nhìn thấy giá trị của m là gì khi ngoại lệ được nâng lên ... cũng không bao giờ làm việc cho một số m hoặc nó ném ngoại lệ lần đầu tiên nó được gọi .. –