Вопрос

Можно ли создать / иметь немодальный .net OpenFileDialog. У меня есть элемент пользовательского интерфейса в главном диалоговом окне, который всегда должен быть доступен для нажатия пользователем.

Это было полезно?

Решение

Нет, OpenFileDialog и SaveFileDialog оба являются производными от FileDialog , который по своей сути является модальным, поэтому (насколько мне известно)нет возможности создать немодальную версию любого из них.

Другие советы

Вы можете создать поток и разместить в нем 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top