Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
.NET 7

Как запустить команду не блокируя саму программу

20.11.2022, 20:52. Показов 1719. Ответов 20

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как доработать метод RelayCommand чтобы при нажатии на кнопку вызов команды проходил асинхронно и расчеты заполнялись в окне не блокируя его до конца расчетов. Все примеры в интернете идут через Task.Run(() =>
В моем случае это вызывает ошибку:
System.NotSupportedException: "Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher."
Очень прошу без сторонних библиотек если это возможно.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class RelayCommand<T> : ICommand
    {
        public Action<T> m_execute;
        Func<T, bool> m_canExecute;
 
        // execute - выполняемое действие
        // canExecute - возвращает true, если команда может выполнить действие при текущих условиях
        public RelayCommand(Action<T> execute, Func<T, bool> canExecute = null)
        {
            if (execute == null)
                throw new ArgumentNullException("execute");
 
            m_execute = execute;
            m_canExecute = canExecute;
        }
 
        public virtual bool CanExecute(object parameter)
        {
            if (m_canExecute == null)
            {
                return true;
            }
            else
            {
                return m_canExecute((T)parameter);
            }
        }
 
        public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }
 
        public virtual void Execute(object parameter)
        {
            m_execute((T)parameter);
        }
    }


Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
internal class MainWindow : NotificationObject
    {
        public ObservableCollection<string> HeadingsSelected { get; set; } = new();
 
        /// <summary>
        /// Считать .csv файл
        /// </summary>
        public ICommand ReadFile
        {
            get
            {
                return _ReadFile ??= new RelayCommand<object>(e =>
                {
                    Task.Run(() =>
                    {
                        Logic();
                    });
                    
 
                });
            }
        }
        ICommand? _ReadFile;
 
        void Logic()
        {
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(1000);
                HeadingsSelected.Add(i.ToString());
            }
            
        }
    }


Сам проект-пример:
WpfApp1.zip
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2022, 20:52
Ответы с готовыми решениями:

Как заставить программу запустить саму себя.
Ситуация следующая.При запуске программы выполняется проверка на то,запущен ли процесс от имени SYSTEM, если не от система запущен то нужно...

Как создать CreateProcess не блокируя программу?
Необходимо вызвать консольное приложение, ждать его завершения, и переходить к следующему процессу. Процесс я создаю так: STARTUPINFO...

Как создать CreateProcess не блокируя основную программу?
Как создать CreateProcess не блокируя саму программу? Нашёл вот это решение, но 2-й процесс почему-то не запускается!:( Помогите,...

20
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
21.11.2022, 10:47
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Можете реализовывать интерфейс в той же VM, можете в другой
Вероятно, это ключевое.

Нет, я не могу реализовать интерфейс для другой View в уже существующей VM (которая уже реализует интерфейс для другого View), т.к. это уже получается god-object. И в этом случае границы размываются настолько, что в принципе становится не понятно в какой VM какие интерфейсы реализовывать и по какой логике из разносить/группировать.

А ещё это целенаправленное снижение производительности, т.к. при создании экземпляра ...
C#
1
public sealed class SomeViewModel : IOtherViewModel, INextViewModel, IAnyViewModel
... он будет проводить полную начальную инициализацию для свойств всех реализуемых интерфейсов, т.к. не может знать для какого именно View был запрошен и какая именно часть его реализации потребуется.

Добавлено через 2 минуты
P.S.: и про модель речь вообще не идёт, она может быть любой и её структура может совершенно не соответствовать структуре V+VM.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2022, 10:47

Как из программы запустить саму себя
в задании сказано запустить пограмму, в которой дать ползователю указать макс. кол-во копий этой программы, после чего ( в цикле или по...

Как в Python WPF запустить саму форму
типа как на C#. нажимаем на пуск и выводится форма с текстбоксами и т.д, в пайтоне же на wpf вообще ничего не выводится, как быть?

Из php запустить команду в ansible (или какую-то команду в консоли/командной строке)
Доброго времени суток. Не могу придумать как из php запустить команду в ansible. Упрощенно говоря, нужно на вэбстранице сделать кнопку,...

Как запустить команду от имени администратора
Нужно запускать комнаты в программе Которая будет работать на разных ОС от XP - до 10 Да и еще многие на windows Не ставят пароля - так...

Как запустить команду ASP из клиентского скрипта?
Как запустить команду ASP из клиентского скрипта? Или из клиентского (браузерного) объекта. Формы и QuerString это немного не-то Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
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. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru