@@ -26,6 +26,7 @@
 using static Avalonia.Win32.Interop.UnmanagedMethods;
 using Avalonia.Input.Platform;
 using System.Diagnostics;
+using Avalonia.Threading;
 using static Avalonia.Controls.Platform.IWin32OptionsTopLevelImpl;
 using static Avalonia.Controls.Platform.Win32SpecificOptions;
 
@@ -668,21 +669,22 @@ public void BeginMoveDrag(PointerPressedEventArgs e)
         {
             e.Pointer.Capture(null);
 
-            // Mouse.LeftButton actually reflects the primary button user is using.
-            // So we don't need to check whether the button has been swapped here.
-            if (e.Pointer.IsPrimary)
+            Dispatcher.UIThread.Post(() =>
             {
-                // SendMessage's return value is dependent on the message send.  WM_SYSCOMMAND
-                // and WM_LBUTTONUP return value just signify whether the WndProc handled the
-                // message or not, so they are not interesting
+                if (e.Pointer.IsPrimary)
+                {
+                    // SendMessage's return value is dependent on the message send.  WM_SYSCOMMAND
+                    // and WM_LBUTTONUP return value just signify whether the WndProc handled the
+                    // message or not, so they are not interesting
 
-                SendMessage(_hwnd, (int)WindowsMessage.WM_SYSCOMMAND, (IntPtr)SC_MOUSEMOVE, IntPtr.Zero);
-                SendMessage(_hwnd, (int)WindowsMessage.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
-            }
-            else
-            {
-                throw new InvalidOperationException("BeginMoveDrag Failed");
-            }
+                    SendMessage(_hwnd, (int)WindowsMessage.WM_SYSCOMMAND, (IntPtr)SC_MOUSEMOVE, IntPtr.Zero);
+                    SendMessage(_hwnd, (int)WindowsMessage.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
+                }
+                else
+                {
+                    throw new InvalidOperationException("BeginMoveDrag Failed");
+                }
+            }, DispatcherPriority.Send);
         }
 
         public void BeginResizeDrag(WindowEdge edge, PointerPressedEventArgs e)