Когда я изменяю размер приложения WinUI 3, в процедуре, которую я должен обнаружить при каждом нажатии горячей клавиши, возникает исключение System.ExecutionEngineException.
System.ExecutionEngineException
HResult=0x80131506
Source=
StackTrace:
return PInvoke.CallWindowProc(wndProc, hWnd, Msg, wParam, lParam);
В моем приложении есть кнопка ToggleButton, которую я хочу переключать с помощью клавиши F6. Все работает нормально с точки зрения правильного переключения кнопки, но всякий раз, когда я быстро изменяю размер приложения, оно вылетает.
[img]https://i .sstatic.net/OtmYvz18.gif[/img]
Я пытался проверить, имеет ли дескриптор окна значение null, но это не помогло. Я также пытался получить лучшее сообщение об ошибке, обработав его, но безуспешно.
Воспроизведение
Репозиторий GitHub
Я использую Visual Studio 2022 с пустым упакованным приложением (WinUI 3 на рабочем столе) с установленным пакетом CsWin32.
MainWindow.xaml.cs:
using System;
using System.Runtime.InteropServices;
using Microsoft.UI.Xaml;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.UI.Input.KeyboardAndMouse;
using Windows.Win32.UI.WindowsAndMessaging;
namespace HotkeySubclassing;
public sealed partial class MainWindow : Window
{
private WNDPROC wndProc = null!;
private LRESULT HotKeyProc(HWND hWnd, uint Msg, WPARAM wParam, LPARAM lParam)
{
uint WM_HOTKEY = 0x0312; // HotKey Window Message
if (Msg == WM_HOTKEY)
{
if (ToggleButton.IsEnabled)
{
ToggleButton.IsChecked = !ToggleButton.IsChecked;
}
}
return PInvoke.CallWindowProc(wndProc, hWnd, Msg, wParam, lParam); // Error happens on this line
}
public MainWindow()
{
this.InitializeComponent();
// Get window handle
HWND hWnd = new(WinRT.Interop.WindowNative.GetWindowHandle(this));
// Register hotkey
int id = 0x0000;
_ = PInvoke.RegisterHotKey(hWnd, id, HOT_KEY_MODIFIERS.MOD_NOREPEAT, 0x75); // F6
// Add hotkey function pointer to window procedure
WNDPROC hotKeyDelegate = HotKeyProc;
nint hotKeyProcPtr = Marshal.GetFunctionPointerForDelegate(hotKeyDelegate);
nint wndPtr = PInvoke.SetWindowLongPtr(hWnd, WINDOW_LONG_PTR_INDEX.GWL_WNDPROC, hotKeyProcPtr);
wndProc = Marshal.GetDelegateForFunctionPointer(wndPtr);
}
}
NativeMethods.txt:
RegisterHotKey
UnregisterHotKey
SetWindowLongPtr
CallWindowProc
MainWindow.xaml:
Click Me
Подробнее здесь: https://stackoverflow.com/questions/793 ... dow-quickl
Получение System.ExecutionEngineException в процедуре при быстром изменении размера окна ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Получение System.ExecutionEngineException в процедуре при быстром изменении размера окна
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-