|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||||||
WPF Модальное Окно для выбора операции с файлами без зависаний при выполнении цикла30.03.2021, 15:31. Показов 4959. Ответов 61
Метки нет (Все метки)
Здравствуйте.
К слову и весь вопрос. Как можно передать окну которое будет находятся в другом потоке главное окно. Окно будет запускать через отдельный класс который и будет создавать второстепенное окно в другом потоке. Хотя вот функция которая вызывает окно:
Хотя не знаю как сделать грамотно. Само окно подразумивает выбор файлов и выбор операции что с ними делать. Но сама функция System.IO.Directory.GetFiles и ForEach может продлится весьма долгое время а это не должно приводить к зависанию программы. С другой стороны это окно модальное а значит когда оно отобразится переключатся на главное должно быть невозможным что уже говорит о том что модальное окно должно быть в потоке где и главное окно. Подскажите как быть?
0
|
||||||
| 30.03.2021, 15:31 | |
|
Ответы с готовыми решениями:
61
Длительные операции без зависаний
Модальное окно Query с кнопками выбора |
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||||||||||||
| 07.04.2021, 15:34 [ТС] | |||||||||||||
Но в любом случае список с файлами у меня глобальный. Кстати можно простой List<FileInfo>. Сам список прекрасно с ним работает и вообще похоже список работает с любым набором данных будь то список или массив. Добавлено через 2 минуты Добавлено через 1 минуту Вот полный код окна:
0
|
|||||||||||||
|
Модератор
|
||||||||
| 07.04.2021, 15:39 | ||||||||
...="{Binding Converter={x:Static local:FileInfoToNameConverter.Instance}}"Вместо locаl - ваше пространство имён.Добавлено через 3 минуты И ещё раз пишу, для WPF он НЕВЕРНЫЙ !!! В Code Behind Окна ничего быть не должно. Только инициализация XAML:
0
|
||||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 07.04.2021, 15:48 [ТС] | ||
|
Добавлено через 4 минуты А вообще было бы интересно посмотренть как вы чисто в XAML создадите КОПИЮ РАБОТЫ Моего кода. Повторяю копию работы. Как уже сказал создавать свой элемент списка файлов не катит ибо список файлов должен быть глобальный и ему нафиг не сдались свойства которые конкретно должны использоваться в модальном окне. Добавлено через 1 минуту Выход только создать 2 списка с файлами. 1 глобальный другой в модальном окне но нафига дублировать одну и туже информацию?
0
|
||
|
Модератор
|
|||
| 07.04.2021, 15:52 | |||
|
XAML - это основной язык WPF. Но WPF - это инструмент создания GUI, а не всего приложения. Вы же в это GUI пихаете всё подряд. Из-за этого возникают задачи на которые WPF в принципе не рассчитан. Да, их можно решить через гору дурно пахнущих костылей - что вы и делаете. Но это костыли и работать они будут через раз. Вам каждый раз придётся искать свой уникальный костыль к уникальной проблеме вами же созданной. Та задача на решение которой вы тратите несколько дней, решается типовым для WPF способом за полчаса. Если вам пофигу на свой труд - тогда действительно без разницы.
0
|
|||
|
управление сложностью
|
|||
| 07.04.2021, 15:54 | |||
|
Добавлено через 47 секунд
0
|
|||
|
Модератор
|
||||
| 07.04.2021, 15:59 | ||||
|
Я могу попробовать помочь вам в изучении WPF, но только если вы сами проявите в этом желание. И проблемы в вашем образовании не только в WPF, судя по вашему коду вы плохо знаете вообще ООП. Поэтому пробелы в знаниях придётся сначала устранять вне привязывании к WPF. Сначала надо нормально изучить ООП и Шарп. Добавлено через 1 минуту Таковым его сделали вы поскольку миз-за недостатка знаний не знаете как сделать по иному. Добавлено через 1 минуту Таковым его сделали вы поскольку миз-за недостатка знаний не знаете как сделать по иному.
0
|
||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||||||
| 07.04.2021, 17:19 [ТС] | |||||||
|
Добавлено через 4 минуты Что еще за BaseInps не нашел описания по шарпу? Добавлено через 28 минут Опишу суть. Есть статический класс для данных которые могут использоваться в любом окне и в любом классе. Этими данными является такие как папка программы, и данные с игрой + список файлов:
Код по выполнению всех действий конечно же в классе файлового менеджера написан. но конкретно Файловый менеджер используется через главное кно и уже через события выводит информацию.
0
|
|||||||
|
Модератор
|
||||
| 07.04.2021, 17:52 | ||||
|
В WPF они напрямую не используются вовсе. Добавлено через 2 минуты Вроде давал вам ссылку - хотя может и ошибаюсь. Простые реализации для тем на форуме Добавлено через 12 минут В Net принята иерархическая структура приложения, в которой вышележащие слои получают информацию от нижележащих. И это относится ко ВСЕМ типам приложений: WPF, Формы, Консоль и др. Статический класс он лежит ВНЕ иерархической структуры. Поэтому в Net статические классы принято использовать только для иммутабельных свойств и полей (Colors, Brushes, все Enum и т.д.) или для статических методов работающих ТОЛЬКО СО СВОИМИ ПАРАМЕТРАМИ (Math, например). Я поэтому вам и пишу, проблема не в том, что вы плохо знаете WPF. Вы плохо знаете ООП, Net, Шарп. И даже создавая Формы или Консоль, как вам кажется, правильно, в действительности вы игнорируете все принципы и правила ООП. По сути вы создаёте Фортран программу используя синтаксис Шарпа. По этой причине и нет никакого смысла показывать вам образец правильного решения. Из-за больших пробелов в знаниях, вы просто не сможете его понять. Для вас огромные трудности представляет даже просто использование элементарного конвертера в WPF. Вы не знаете, что такое пространства имён, как их задавать и как на них ссылаться. А это самые азы - первые 10 часов курса Шарпа И WPF.
0
|
||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 07.04.2021, 19:09 [ТС] | ||
|
Да я незнаю шарп до сканально и пишу уж как привык и как мне удобно. Поробуй помнить обсалютно все в шарпе. И так кое что не могу зпомнить приходится частенько лезть в гугл. Но всеже пишу исключительно как хоби. Для меня это не работа. К томуже в техникуме не изучали Шарп со стороны ООП. Добавлено через 4 минуты Про пространсво имен я вкурсе. Это namespace. Но как оно относится к делу не понятно. Повторюсь что я использую статический класс для глобальных данных только потому что мне так удобно. Я в курсе что скорее всего правильнее создать данные в 1 классе и передавать его другим классам если на то пошло. Но зачемхранить данные в главной форме чтобы передавать ихже другим когда как можно хранить данные в статическом классе и использовать везде? Добавлено через 2 минуты И WPF я использую как WinForms и мне так удобно. Ябы и не брал WPF если бы WinForms был такимже гибким для реализации дизайна. WPF я только из за гибкости к дизайну выбрал. Все. Добавлено через 2 минуты К томуже не я 1 использую WPF также как и WinForms да и они взамозаменяемые. Тоесть wpf можно использовать в WinForms как и на оборот WinForms можно использовать в WPF и я не вижу не 1 причины почему я должен делать по стандарту когда как Visual Studio позволяет мне это делать иначе. Добавлено через 14 минут И вообще я знаю отличия класса от статического класса. Мне и нужен класс на подобие Math тоесть класс который не надо создавать и к которому можно обращаться из любого места. Я также знаю что в таком классе обычно используются методы вычислений и т.п но что мешает в нем хранить данные чтобы к ним также можно было получать доступ нежели заниматься гемороем и передавать эти данные другим объектам. Хотя наверное 2ое даже будет более правильным. Добавлено через 3 минуты Как уже сказал список файлолв используется не только в модальном окне а значит если он будет в обычном классе то объект этого класса както нужно будет передать модальному окну тоесть делать это при вызове модального окна. И это уже говорит о том что в xaml прописать объекта клдасса невозможно так как этот объект класса будет находится не модальном окне а в коде главного окна.
0
|
||
|
Модератор
|
|
| 07.04.2021, 19:25 | |
|
Alexandr_7, если вы не хотите изучать как создаются правильно приложения на Шарпе - это ваше личное дело.
Вот только такие пространные разглагольствования ни к чему. Сами себя ими что ли убеждаете? Для тех кто знаком чуть по более с Шарпом - они наполовину ваши фантазии, на остальную - признание в отсутствии знаний и не желании их получат. Пока проекты маленькие, собираемые "на коленки" вы как-то кривовастенько, но сможете их реализовывать. Да, и то с гораздо большими трудозатратами, чем при правильном подходе. Но это ваше личное дело - делайте как вам угодно.
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 07.04.2021, 19:39 [ТС] | ||
|
Ну объясните если есть другие способы. Про расширения я тоже в курсе но они в данном контексте не уместны.
Вот для меня совсем не выгадно писать киломатры кода в 1 клссе. Это марока целая а когда ты создаешь в отдельном классе код но экземпляр этого класса помещаешь в главный класс (В данном случае класс главной формы / окна) то смысл. Да это кратко получается но все равно передача этих данных другим окнам или классам ну такое себе. К томуже опятьже xaml модального окна не должен никак взаимодействыовать с данными главного окна. Как вы себе это представляете вот не понимаю. Мордальному окну эти данные все равно нужно передать. Добавлено через 1 минуту Добавлено через 2 минуты Да и мне самому интересно как это в XAML пишется код что к cs вообще не прибигать но XAML терепеть не могу мне его синтаксис его код вот вообще никаким местом не понятны. Всеже я привык к шарпу а не к XAML Добавлено через 1 минуту Получается и вызывать окна и передавать им данные все через XAML можно. Это какойто бред. И тогда и искать данные и прочие тоже через XAML? Добавлено через 7 минут И вообще я думал XAML в WPF только для дизайна сделан но никак не писать полноценный код темболее речь не о калькуляторе идет речь идет о поиске и взаимодействии с файлами другой игры. В данном случае чтобы к этим файлам можно было легко обратится а также провести быстренько операции с ними. Это можно сделать и обычными батниками только зачем 10 батников если можно сделать красивый интерфейс и работать через него. Добавлено через 4 минуты Короче я конешно скину: Eador_M_of_the_B_W_Launcher.7z Но предупреждаю что WPF в данном случае используется как гибкий шаблон диизайна точно также как и WinForms но WinForms такой гибкости не дает. Более того я и из WinForms переносил но допиливал чтобы более естественно это смотрелось. Добавлено через 10 минут И вот кстати предыдущая версия на WinForms: Eador_M_of_the_B_W_Launcher.7z Еще даже думал может просто элемент списка из WPF в WinForms добавить но так как WPF для дизайна гибкий то решил перенести под WPF и както я особо не встречал чтобы использовали только xaml в wpf но я смотрел с ютуба уроки.
0
|
||
|
Модератор
|
|||
| 07.04.2021, 20:44 | |||
|
А вот писать готовые примеры - не вижу смысла. У вас ошибки в АРХИТЕКТУРЕ приложения. И ошибки очень существенные, не касаемые собственно WPF. Шарп приложения в принципе рассчитаны на другую архитектуру. Даже больше не Шарп, а ООП приложения. Чтобы исправить эти ошибки необходимо ПОЛНОСТЬЮ С НУЛЯ пересоздать всё приложение совершенно по иной методологии. И от готового примера для вас не будет никакого толку. И какой смысл мне тогда тратить на него время? Добавлено через 3 минуты Но на будущее: намного удобнее было бы загрузить на GitHub. Там сразу я мог бы внести правки, и вы бы видели какие внесены изменения.
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 07.04.2021, 23:31 [ТС] | ||
|
Добавлено через 5 минут И не я один использую статичные классы для глобальных данных https://www.youtube.com/watch?v=9Fp-w9EApLc Правдо да можно у меня немного оптмизировать. Класс он и в африке класс следовательно и у статичных классов должны быть конструкторы.
0
|
||
|
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,715
|
||
| 07.04.2021, 23:40 | ||
|
Добавлено через 1 минуту Все остальные ваши идеи будут не верные, есть общий принцип проектирования WPF приложений с паттерном MVVM и взаимодействия UI элементов с их VM
1
|
||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||||||||
| 08.04.2021, 00:25 [ТС] | ||||||||
|
Про интерфейсы вылетело из головы. Конечно можно использовать но по сути интерфейсы имеют лишь заготовки методов а их реализацию нужно все равно делать в классе. Это удобно если нужно сделать 2 класса с одинаковыми методами чтобы не описывать каждый раз методы то в интерфейсе описываешь 1 раз. Только все равно без понятия как их применять в моем случае.
Добавлено через 3 минуты Другое дело что операции неад файлами все равно происходят в другом потоке и через события выводится процесс операций. Добавлено через 9 минут Добавлено через 22 минуты
Итак. Что я делаю в своей программе. Ну во первых я пытаюсь читать глобальные данные из json и если получилось то все. Данные загружены. Если нет то я запрашиваю чтобы пользователь укеазал эти данные вручную. Под данными я подразумиваю: Игра (Полный путь и имя эккзешника) Папка с сохранениями Сохранения Астрала Сохранение Осколка (Эти сохранения в игре разные. Лично у меня для Астрала и Осколка определенны 2 сохранения которыми я пользуюсь.) Ну и также hex редактор (Полный путь и имя эккзешника) Вот эти данные должны быть глобальными. И храню я их в статическом классе чтобы не передавать класс другим окнам. (Возможно есть другой способ. Я не в курсе) И именно после загрузки этих данных список с файлами сохранений должен создаваться. Более того должна быть возможность его обновить и список также должен быть глобальным ну не обязательно но файловому менеджеру нужно передавать этот спиок. Файловый менеджер все равно использует GetFiles чтобы получить теже самые данные так зачем лишний раз это делать если ему можно дать список. Так что даже если создавать для списка с файлами отдельный класс и гдето его реализовывать то в любом случае этот список нужно дать не только модальному окну но и файловому менеджеру. В вашем коде определенно нужно избавится от SelectDirectoryExecute() так как данные уже известны на момент создания списка с файлами.
0
|
||||||||
|
управление сложностью
|
||||
| 08.04.2021, 07:19 | ||||
|
1
|
||||
|
Модератор
|
|||||
| 08.04.2021, 11:09 | |||||
|
По простому - говнокод. С него не следует брать пример. Где и для чего используются в Net статичные классы я вам уже объяснил. Если вам моих слово мало, может посмотреть все Net библиотеки - десятки или сотни тысяч типов. Добавлено через 2 минуты Как я вам уже писал, у вас пробелы по сути уже для первых 10 часов учебного курса. Поэтому пишите не "как вам удобно", а "как умеете". А умеете вы очень плохо из-за огромных пробелов в знаниях. Добавлено через 10 минут Эта статья полностью применением и к Консольным приложениям. И если у вас не подобная архитектура в Формах или Консоли, то у вас БОЛЬШИЕ косяки в реализации Решения. Подобная же архитектура, с учётом особенностей, была разработана и для WPF - паттерн MVVM. В исключительно редких случаях, в решении каких-то ультрамелких, обособленных задач реализация WPF Решения вне MVVM может быть оправдана. При этом заметьте - я не слова не пишу за XAML. Вы можете задавать эти же Привязки и Контекст Данных на Шарпе, но XAML этого гораздо удобнее и нагляднее. А вот то, что вы вообще не используете Привязки и Контекст Данных - это действительно большой косяк. Там где можно сделать одной строкой XAML кода - вы будете наворачивать десяток или более строк неочевидного Шарп кода. Кстати, Привязки можно было использовать ещё с Форм. Но уверен на 100%, что ни в одном приложении вы их не использовали. Добавлено через 4 минуты Поэтому вам и написал, что пример правильной реализации отдельного куска - бессмыслен. У вас неправильная архитектура Решения не для WPF. Она вообще для Шарпа в целом неправильная. И в таком Решении, сделанном "через ж@пу", никакого лоска не наведёшь. Его надо целиком отправлять в унитаз и писать заново. И без разницы какой UI будет у него - хоть даже Консоль.
0
|
|||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||||||||||||||||||
| 09.04.2021, 18:09 [ТС] | |||||||||||||||||||
|
Опятьже про интерфейсы я в курсе но без понятия где мне у себя применять интерфейс?
Ладно про статический класс забили. Но файловый менеджер а он та каким местом неправильный. Да есть 1 косячек мне приходится в события окончания передавать какая операция завершилась и дело тут в том что я использую 1 объект файлового менеджера на множества операций. Только из за экономии памяти. Создавать для каждой операции свой объект конечно легче но тем не менее это и памяти тратится больше. Мне все равно нужно было делать так чтобы 1 полоска могла использоваться для нескольких операций. Приоритетной является распаковка сохранений но все равно нужно было учитывать прям много моментов например если распаковка завершилась а игра все еще загружается или уже загружена то информацию об этом нужно отобразить так что условий пришлось делать кучу. Даже запутался сам в этом но добился рабочего результата. Пример который я скинул полностью рабочий но конечно протестировать него без игры у вас не выйдет. Добавлено через 3 минуты https://www.youtube.com/watch?v=FQf14kj8HwU&t=545s И по этому уроку я вообще не понял как его можно применить в моем случае. Интерфейс не делает тебе данные глобальными. Добавлено через 4 минуты Про модель данных я не очень понимаю слова. На сколько я понял это объявленные переменные, функции в классе? Добавлено через 4 минуты Я лишь использую события элементов для изменения этих данных но данные давно уже как храню в классе который обычно называю settings тем более серилизация и десерилизация целого класса вещь удобная поэтому храню данные там а в элементах отображаю эту информацию. Добавлено через 9 минут Еще поблема в том что я не могу продумать работу всеей программы зароанее целиком. Очень сильная проблемма особенно когда работаешь с моделью данных. Добавлено через 3 минуты Ладно. Тему можно реально закрывать. Начну с нуля. Для начало нужно разобраться с правильной работой Файлового менеджера. Ибо то что я там на куралесил меня все равно не устраивает. Создам отдельную тему.
0
|
|||||||||||||||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 09.04.2021, 18:53 [ТС] | ||
|
Работа файлового менеджера и связанное с ним
0
|
||
| 09.04.2021, 18:53 | |
|
Модальное окно без jQuery
Верстка без адаптации и модальное окно (photoSwip) Окно с тремя метками и модальное окно для изменения их текста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|