的應用似乎凍結,因爲鼠標捕獲不會自動從窗口大小調整或DragMove()
操作Dispatcher.PushFrame()
從用戶代碼中調用後釋放。
的解決方法是手動從應用程序的任何窗口正在調用Dispatcher.PushFrame()
之前捕獲鼠標釋放鼠標捕獲:
...
if (priority < DispatcherPriority.Loaded)
{
IntPtr capturingHandle = GetCapture();
for (int i = 0; i < Application.Current.Windows.Count; i++)
{
if (new WindowInteropHelper(
Application.Current.Windows[i]
).Handle == capturingHandle)
{
Mouse.Capture(
Application.Current.Windows[i],
CaptureMode.Element
);
Application.Current.Windows[i].ReleaseMouseCapture();
break;
}
}
}
...
此替代方法利用GetCapture()
P /調用聲明:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetCapture();
聽起來很尷尬。你爲什麼不用'Dispatcher.BeginInvoke()'和適當的'DispatcherPriority'? –
這是確保您在返回之前實際繪製到屏幕上的唯一方法。你知道開始調用是異步的嗎?如果我想要調用任何東西,但即使如此,您仍然從調度程序在自己的時間處理的實際繪製更新中抽象出來。 –
不是真的。使用'DispatcherPriority.ApplicationIdle'保證你的代碼將在所有其他事情完成後被調用。順便說一句,「畫」這個詞聽起來太winforms了。你究竟在做什麼? –