C # OpenFileDialog Немодальный возможен
-
20-08-2019 - |
Вопрос
Можно ли создать / иметь немодальный .net OpenFileDialog. У меня есть элемент пользовательского интерфейса в главном диалоговом окне, который всегда должен быть доступен для нажатия пользователем.
Решение
Нет, OpenFileDialog и
Другие советы
Вы можете создать поток и разместить в нем OpenFileDialog.В примере кода отсутствует какая-либо синхронизация, но он работает.
родовое словоС помощью этого кода вы можете добавить что-то для запуска события в потоке пользовательского интерфейса (будьте осторожны при вызове!), чтобы знать, когда они будут выполнены.Вы можете получить доступ к результату диалога
родовое словоиз вашего потока пользовательского интерфейса.
Я знаю, что немного опаздываю, но вы можете создать новую форму, без полей, прозрачную или за пределами отображения, и показать диалоговое окно файла, изменяющее это окно.
Это старый пост, но я потратил 2 дня на достижение результата, который хочу здесь представить (с «контекстом» и полным, но упрощенным кодом) Ответ @Joshua сработал для меня (наконец, когда я верю в .ConfigureAwait (true), см. Первый пример кода). Возможно, мне удалось написать меньше строк на основе длинной статьи MSDN Модель потоков , которую мне все еще нужно прочитать.
Мой контекст - WPF (базовый MVVM), и я должен выбрать файл для записи некоторой резервной копии .CSV (сетки данных). Мне нужно, чтобы функция (член) ChooseFileFromExtension()
была асинхронной с неблокирующим FileDialog
и код для класса MyFileDialog
родовое слово fetcher.BeginInvoke()
запускает (асинхронно) SaveFileDialog
ShowDialog()
в другом потоке, поэтому основной поток / окно пользовательского интерфейса (... ++) не блокируется и не отключается, как это было бы при простом прямом вызове ShowDialog()
. TaskCompletionSource<string> tcs
не является объектом пользовательского интерфейса WPF, поэтому доступ к нему для другого «единственного» потока допустим.
Это область, которую мне нужно изучить дальше. Я чувствую, что нет никакой "окончательной" документации / книги по этому вопросу (возможно, стоит еще раз взглянуть на книги, подобные той, что написала Стивен Клири). Этот код следует улучшить, по крайней мере, с учетом темы, описанной на c-sharp-asynchronous-call-without-endinvoke
Он работает с FileDialog пространства имен Microsoft.Win32