場景:爲UI控件啓用了拖動功能的C#/ WPF應用程序。從Windows資源管理器中拖動文件並將其放到UI控件上時,會出現一個MessageBox。文件拖放事件處理程序中的MessageBox導致Windows資源管理器凍結
問題:只要不點擊MessageBox(通過點擊「OK」),Windows資源管理器被凍結,並且可能等待拖放事件返回。
問:有沒有辦法從其等待發佈Windows資源管理器之前顯示的消息框?那麼「DragEventArgs」類的「Handled」屬性呢?
代碼:
private void OnDrop_ButtonOpen(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
MessageBox.Show(files[0]);
}
}
PS:有其他類似的問題。然而,沒有辦法「過早地」返回事件。
最終MessageBox將被(可能很耗時)的文件加載到內存中。但是,應用程序也應該能夠通過公共的打開文件對話框打開文件。我的sw-architectural-beginner-gut-feeling告訴我(可能不正確),無論文件名/路徑如何出現(拖放或對話框),都應該使用相同的文件加載功能。但是,這裏也許沒有矛盾。也許可以從「國外」任務的開放對話框上下文中調用相同的加載文件函數? – AddeTbkg
@AddeTbkg:是的,一般功能是最好的。是的,該功能可以從OFD和另一個線程/任務中調用。請記住,線程和任務必須調用才能訪問UI。 –