Когда я изменяю размер приложения 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#
Место общения программистов C#
1736321523
Anonymous
Когда я изменяю размер приложения 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79337564/getting-system-executionengineexception-in-procedure-when-resizing-window-quickl[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия