7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
||||||
1 | ||||||
Использование Tasks для отображения результатов операции14.01.2016, 16:46. Показов 1195. Ответов 15
Метки нет Все метки)
(
Я совсем с этими тасками запутался. Поэтому объясню проще, чтобы мне подсказали. Есть форма, на ней последовательно должны выполняться некоторые операции (в отдельном таске, чтобы форма не фризилась) и отображать результат на форму. Вот схема:
0
|
|
14.01.2016, 16:46 | |
Ответы с готовыми решениями:
15
Плагин для отображения результатов опроса в виде диаграмм Применение поразрядной операции с НЕ (~) для обратного отображения битов Использование ListBox для вывода результатов Использование AxWindowsMediaPlayer для отображения позиции трека |
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||
14.01.2016, 18:19 | 3 | |||||
young_snake, формулировка задания расплывчата, но скорее всего-надо сделать 1 метод, который возвращает
Task<нужный_тип_результата> ,а потом писать что-то в духе:
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
||||||||||||||||
14.01.2016, 18:35 [ТС] | 4 | |||||||||||||||
insite2012, сделал вот так:
Но теперь почему-то пишет:
Добавлено через 6 минут EvilFromHell, ну почему расплывчата? Можно упростить формулировку - нужно выполнять подряд обработку данных, чтобы главная форма не фризилась. А в вашем примере Process(arr[i]) получается будет фризить форму, как у меня было раньше. И я сейчас понял, что если бы все сработало, то месседжбокс "Done", наверное появился бы сразу, а не после выполнения всех операций.
0
|
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||
14.01.2016, 18:50 | 5 | |||||
young_snake, в чем смысл этих странных манипуляций? Зачем пытаться открыть какую-то форму не в GUI потоке? зачем какой-то sleep? Зачем вообще метод
когда awaitить можно сразу тот Task, что в цикле? Эксепшен скорее всего уже в этом месте:
Потому что вы обращаетесь к форме не из GUI потока. Добавлено через 3 минуты Я абсолютно не понимаю зачем Process(arr[i]) вообще нужен, поэтому прокомментировать это никак не могу. Я его тупо скопировал у вас. Речь сейчас не о нем. Добавлено через 7 минут Вот вам простой пример, создаете приложение винформс, кидаете на форму лейбл, а обработчике события Load пишите:
1
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
14.01.2016, 19:41 [ТС] | 6 |
EvilFromHell, спасибо за подробный ответ, буду пробовать.
Добавлено через 18 минут Process нужен, потому что я создаю новую форму с com-объектом. Но чтобы форма не мешалась, я ее не показываю. А когда объект отработает, я избавлюясь от формы. Добавлено через 53 секунды А пользоваться этим объектом в отрыве от формы не получается, дебаггер ругаться начинает.
0
|
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
14.01.2016, 19:44 | 7 |
А зачем тут именно форма? Нельзя как-то проще общаться с тем объектом?
Добавлено через 31 секунду Это как-то очень странно, полюбому вы что-то делаете неправильно.
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
||||||
14.01.2016, 19:52 [ТС] | 8 | |||||
EvilFromHell, возможно и неправильно, но по-другому не получается. Но вопрос в другом:
что не так с этим местом?
0
|
![]() 6293 / 3914 / 1575
Регистрация: 09.05.2015
Сообщений: 9,217
|
|
14.01.2016, 19:56 | 9 |
Тип реального исключения указан в свойстве InnerException исключения TargetInvocationException.
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
14.01.2016, 20:07 [ТС] | 10 |
Someone007, да, в самом деле, так все стало более понятно:
{"Создание экземпляра элемента управления ActiveX '54d38bf7-b1ef-4479-9674-1bd6ea465258' невозможно: текущий поток не находится в однопоточном контейнере."} Это особенность компонента такая? (Компонент дает возможность из приложения использовать RDP).
0
|
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
14.01.2016, 23:56 | 11 |
young_snake, у вас этот кусок кода до сих пор внутри Task?
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
15.01.2016, 11:35 [ТС] | 12 |
EvilFromHell, ну да, а куда же я его дену. Я так почитал, то люди пишут что нужно создавать MTA треды с помощью threads, с тасками такое делать, видимо нельзя, или я не нашел способа.
0
|
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
15.01.2016, 12:21 | 13 |
young_snake, еще раз говорю вам, не надо внутри каких-либо потоков, отличных от основного, ничего делать с формами. Все действия с GUI должны быть в одном потоке.
Добавлено через 1 минуту Скорее всего все дело в этом, если судить по эксепшену. Но что там за компонент и как он работает я не знаю.
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
15.01.2016, 13:03 [ТС] | 14 |
EvilFromHell, да я понимаю, ну тут по-другому никак. Потому что ком-объект привязан ко второй скрытой форме. Поэтому я запускаю вторую форму невидимой, выполняю полезную работу, закрываю форму. Но чтобы в основном интерфейсе в реальном времени отображались результаты действий ком-объекта, нужно запускать этот процесс в отдельном потоке, иначе форма будет фризиться. Но как оказалось это можно делать только если указать параметр STA этому треду при создани. Вот примерно такая же ситуация у человека . Это какая-то особенность com-объектов еще с древних времен, получается. Но в tasks никак не указать какой тип апартаментов использовать. Или я не понял как.
0
|
975 / 870 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
15.01.2016, 13:17 | 15 |
Мне ну абсолютно не ясно, как может быть некий COM объект прибит гвоздями к какой-то форме. Полюбому вы что-то делаете абсолютно неправильно, только вот с ходу не ясно, что же именно. Скиньте проект-скорее всего так станет намного яснее.
0
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
15.01.2016, 13:31 [ТС] | 16 |
EvilFromHell, отписал в лс. Там закомментировано место, где я пробовал создавать объект без формы, но при этом создавалось исключение.
0
|
15.01.2016, 13:31 | |
Помогаю со студенческими работами здесь
16
Использование DISTINCT для отображения уникальных значений Использование данных из dataGridView для отображения на карте Использование ProxyModel для отображения элементов ListView Использование BackgroundWorker в WPF для отображения прогресса загрузки БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |