Получение System.ExecutionEngineException в процедуре при быстром изменении размера окнаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение System.ExecutionEngineException в процедуре при быстром изменении размера окна

Сообщение 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




Подробнее здесь: https://stackoverflow.com/questions/793 ... dow-quickl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение System.ExecutionEngineException в процедуре при быстром изменении размера окна
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Повреждение памяти и исключение System.ExecutionEngineException при использовании перекрывающегося ввода-вывода в C#
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Метод не найден: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)
    Anonymous » » в форуме C#
    0 Ответы
    138 Просмотры
    Последнее сообщение Anonymous
  • Почему этот код бросает System.executionEngineException
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему этот код бросает System.executionEngineException
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»