Vì vậy, tôi đang gặp phải một vấn đề rất lạ với ứng dụng thử nghiệm nhỏ của tôi. Và theo vấn đề, tôi có nghĩa là nó bị treo ... cứng. Không có ngoại lệ (ít nhất, không có gì mà tôi có thể nắm bắt) được ném ra, chỉ là "Blah Blah đã ngừng đáp ứng ..." tin nhắn. Nó treo CHỈ khi tôi chạy ứng dụng ở x64, chế độ phát hành và bên ngoài IDE. Nếu tôi chạy nó trong chế độ x86, hoặc nếu tôi chạy nó trong IDE trong x64 hoặc tôi chạy nó độc lập như DEBUG trong x64 nó hoạt động tốt.Sự cố với ứng dụng .NET 4.0 x64 ở chế độ Phát hành bên ngoài IDE chỉ
Tôi đã thu hẹp nó xuống p/gọi lệnh PeekMessage của tôi. Vì vậy, tôi cần những tâm trí tuyệt vời ở đây để nhìn vào crap tôi đã viết và cho tôi biết nếu tôi làm đúng. Bởi vì, nghiêm túc, tôi sắp mất trí óc vua **. Tôi đã thử điều này trên 2 máy tính và cả hai đều thể hiện cùng một hành vi. Tôi hơi lo ngại rằng đây có thể là lỗi .NET 4.0.
Dù sao, đây là mã p/gọi của tôi. Xin vui lòng cho tôi biết nếu bạn thấy bất cứ điều gì kỳ lạ hoặc chỉ đơn giản ngu ngốc:
Đây là lời kêu gọi PeekMessage:
private static bool PeekMessage()
{
MSG message = new MSG(); // Message to retrieve.
return Win32API.PeekMessage(ref message, IntPtr.Zero, 0, 0, PeekMessageFlags.NoRemove);
}
Dưới đây là PeekMessage (Chú ý: Thuộc tính an ninh đàn áp là vào định nghĩa lớp, vì vậy nó đang được ứng dụng):
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool PeekMessage(ref MSG msg, IntPtr hwnd, uint wFilterMin, uint wFilterMax, PeekMessageFlags flags);
đây là MSG:
[StructLayout(LayoutKind.Sequential)]
internal struct MSG
{
/// <summary>Window handle.</summary>
public IntPtr hwnd;
/// <summary>Message to process.</summary>
public uint Message;
/// <summary>Window message parameter 1.</summary>
public uint wParam;
/// <summary>Window message parameter 2.</summary>
public uint lParam;
/// <summary>Time message was sent?</summary>
public uint time;
/// <summary>Mouse pointer position.</summary>
public Point pt;
}
Và cuối cùng, PeekMessageFlags:
internal enum PeekMessageFlags
{
/// <summary>Keep message on the message queue.</summary>
NoRemove = 0,
/// <summary>Remove message from the queue.</summary>
Remove = 1,
/// <summary>Do not yield execution to waiting threads.</summary>
NoYield = 2
}
Tôi đã kiểm tra các bản ghi sự kiện và tôi nhận điều này:
Faulting application name: Tester_Graphics.exe, version: 1.0.0.0, time stamp: 0x4ec0ba85
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x00000000000001cb
Faulting process id: 0x1260
Faulting application start time: 0x01cca299e2c21a77
Faulting application path: D:\Code\Current\Gorgon\Branches\2.x\Dorian\Examples\Tester_Graphics\bin\Release\Tester_Graphics.exe
Faulting module path: unknown
Report Id: 20ac891f-0e8d-11e1-a5d7-bcaec5753ddd
Vì vậy, nếu bạn thấy bất cứ điều gì không hoàn toàn đúng, xin vui lòng cho tôi biết. Tôi ghét điều này không phải là lỗi của tôi.
Xin lỗi nếu nó không đủ chi tiết, nếu bạn cần thêm thông tin, chỉ cần để lại một ghi chú.
Tôi có các sự cố tương tự với ngay cả các thông số sai nhỏ nhất, đặc biệt là các chuỗi (Unicode so với Ansi, v.v.) [Trang này] (http://www.pinvoke.net/default.aspx/user32.peekmessage) liệt kê một sự khác biệt chữ ký cho 'PeekMessage'. Tôi đề nghị bạn thử nhiều người khác cho đến khi bạn tìm thấy một tác phẩm. –
Là một lưu ý ngẫu nhiên, nếu bạn gặp sự cố khi gỡ lỗi điều này, điều đó gây ra ngoại lệ. Giả sử bạn có thể tải chương trình của bạn sau khi bạn xây dựng nó, bạn có thể chạy nó. Sau đó, studio trực quan thông thường đính kèm để xử lý và bạn sẽ có thể gỡ lỗi nó ngay cả trong chế độ phát hành miễn là các PDB với nó. Sau đó, bạn có thể bật break trên bất kỳ ngoại lệ ném (CTRL + ALT + E) và bạn có lẽ sẽ nhận được rất nhiều thông tin. –
Vâng, tôi đã cân nhắc thực hiện điều đó, nhưng nó đã bị loại trừ ngay lập tức, vì vậy không có thời gian để đính kèm. Bây giờ tôi nhận ra rằng tôi có thể đã thêm một sự chậm trễ 'Sleep' trước 'PeekMessage', nhưng đã nửa đêm và tôi hầu như không thể hình thành những câu mạch lạc, nên nó không xảy ra với tôi vào lúc đó. – Mike