GetMessage() gegeben ein System.ExecutionEngineException
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern
bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, int vk);
[DllImport("user32")]
public static extern
bool GetMessage(ref Message lpMsg, IntPtr handle, uint mMsgFilterInMain, uint mMsgFilterMax);
public const int MOD_ALT = 0x0001;
public const int MOD_CONTROL = 0x0002;
public const int MOD_SHIFT = 0x004;
public const int MOD_NOREPEAT = 0x400;
public const int WM_HOTKEY = 0x312;
public const int DSIX = 0x36;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
bool r = RegisterHotKey(Handle, 1, MOD_ALT, DSIX);
if (!r)
{
MessageBox.Show("can't do..");
return;
}
Message msg = new Message();
while (GetMessage(ref msg,IntPtr.Zero, 0, 0))
{
if (msg.message == WM_HOTKEY)
{
MessageBox.Show("do work..");
}
}
}
}
public class Message
{
public int message { get; set; }
}
}
wenn das Ziel ist, gedrückt wird, bekomme ich die folgende Fehlermeldung:
Exception of type 'System.ExecutionEngineException' was thrown.
was ist das? wie man dieses Problem beheben? Vielen Dank im Voraus.
- Ihre Nachricht Klasse nicht genügend Mitglieder, so GetMessage() verdirbt die garbage Collection-heap. Überschreiben von WndProc() statt. Suche nach "setvisiblecore", um herauszufinden, wie zu halten, das Fenster unsichtbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist zum scheitern verurteilt. Wenn Sie schreiben Ihre eigene message-loop wird es aufhören, WinForms, den Erhalt von Nachrichten.
Überschreiben Sie stattdessen die PreProcessMessage oder WndProc Funktionen.