Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 25.09.2013
Сообщений: 46
1

Доступ к UI из другого потока

09.09.2019, 18:06. Показов 3176. Ответов 6
Метки нет (Все метки)

Добрый день. Никак не могу придумать, как решить мою проблему, пишу библиотеку, в которой выполняется загрузка строк, так как этот процесс иногда не быстрый, затолкал в отдельный поток. Но столкнулся с проблемой что не могу получить доступ к UI.
Допустим есть класс :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainClass
{
   ...
   private void StartLoadRows()
   {
       var rowLoader = new RowLoader();
       rowLoader.RowLoaded += OnRowLoad;
 
       var thread = new Thread(new ThreadStart(delegate {
          rowLoader.Start();
       }));
   }
 
   private void OnRowLoad(object sender, string text)
   {
       IMyUiElement.AppendText(text);
   }
   ...
}
Что можно использовать для работы в потоке, таким образом что бы в методе IMyUiElement.AppendText никак не заморачиваться с потоками, а дополнить метод OnRowLoad. ТОесть загрузка долгая и периодически выпадает событие что вот новая строка?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2019, 18:06
Ответы с готовыми решениями:

Доступ к Control из другого потока
Пример из книги: Эндрю Троелсен "Язык программирования C# 5.0 и платформа .NET 4.5" (6-е издание) ...

Доступ к TextBox из другого потока
Здравствуйте. У меня есть TextBox, в который я пишу все логи, но когда я пытаюсь сделать это из...

Доступ к контролам из другого потока
Как мне получить доступ к контролам на форме из другого потока? Есть код который должен проверить...

Доступ к контроллам из другого потока
private void changeInfo(MyEventArgs mea) { if (InvokeRequired) {...

6
75 / 44 / 17
Регистрация: 11.03.2013
Сообщений: 525
Записей в блоге: 4
10.09.2019, 07:39 3
Цитата Сообщение от AderRol Посмотреть сообщение
Что можно использовать
Попробуйте
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class MainClass
{
   ...
   private void StartLoadRows()
   {
       var rowLoader = new RowLoader();
       rowLoader.RowLoaded += OnRowLoad;
 
      Invoke(new MethodInvoker(delegate
                    {
                        rowLoader.Start();
                    }));
   }
 
   private void OnRowLoad(object sender, string text)
   {
       IMyUiElement.AppendText(text);
   }
   ...
}
0
1 / 1 / 1
Регистрация: 25.09.2013
Сообщений: 46
10.09.2019, 08:54  [ТС] 4
а вот если не использовать в моей библиотеки Invoke - так как IMyUiElement может быть как Winforms, так и WPF, а сама библиотека ни WinForms и ни WPF
0
214 / 148 / 48
Регистрация: 28.12.2016
Сообщений: 716
10.09.2019, 11:27 5
AderRol, ну дак юзаеете в WF, значит синхронизацию делайте через Invoke

this.Invoke(new Action(() => { IMyUiElement.AppendText(text); }));
0
1 / 1 / 1
Регистрация: 25.09.2013
Сообщений: 46
10.09.2019, 12:22  [ТС] 6
Defences, был бы только WinForms или WPF - это ясно как божий день что и как использовать. А когда не известно что будет - как в этом случае поступать? Если бы мне были неважны промежуточные варианты - юзал бы Task.
0
Эксперт .NET
7572 / 5060 / 1204
Регистрация: 25.05.2015
Сообщений: 15,424
Записей в блоге: 14
10.09.2019, 12:39 7
Ну так юзайте:
Процент загрузки e.ProgressPercentage
Копирование файлов с ProgressBar без зависания программы

Проблема в получении контекста синхронизации. Вероятно, внутри библиотеки синхронизацией заниматься не надо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2019, 12:39

Доступ к элементам формы из другого потока
В общем, у меня есть много разных функций, которые вызывают другие функции, в которых происходят...

Доступ к элементам формы из другого потока
Хочу сделать в фоновом потоке добавление UserControl в StackPanel. Старт потока: Thread t =...

Доступ к элементу формы из другого потока
Добрый день! Хочу по событию изменить текст кнопки. private void OnDisconnected(object sender,...

Доступ к элементам формы из другого класса/Потока
Здравствуйте, у меня есть класс работы потоков, при выполнении метода (В потоке) должна идти запись...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.