powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
5 сообщений из 5, страница 1 из 1
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
    #38896112
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ведь в документации вроде как сказано, что для Task.ContinueWith(Action<Task>, TaskContinuationOptions.ExecuteSynchronously) выполняется синхронно?
авторSpecifies that the continuation task should be executed synchronously. With this option specified, the continuation will be run on the same thread that causes the antecedent task to transition into its final state.
Есть вот такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Cursor = Cursors.WaitCursor;
Task.Factory.StartNew(() =>
{
  using (var p = Process.Start("..."))
    p.WaitForExit();
}).ContinueWith(t =>
{
  Cursor = Cursors.Default;
}, TaskContinuationOptions.ExecuteSynchronously);
 


- InvalidOperationException вылетает именно на Cursor = Cursors.Default, и ругается на недопустимую кросспоточную операцию. Разумеется, я могу установить курсор через вызов Invoke/BeginInvoke, но хотелось бы сделать в русле конценпции TPL.
...
Рейтинг: 0 / 0
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
    #38896210
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinterGraveyard,

первая задача будет запущена в другом потоке, отличном от гуевого. Соответственно, продолжение будет в этом же потоке, не в гуевом.
...
Рейтинг: 0 / 0
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
    #38896625
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinterGraveyard,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            Cursor = Cursors.WaitCursor;
            var uiContext = TaskScheduler.FromCurrentSynchronizationContext();
            Task.Factory.StartNew(() =>
            {
                using (var p = Process.Start("..."))
                    p.WaitForExit();
            }).ContinueWith(t =>
            {
                Cursor = Cursors.Default;
            }, CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, uiContext);
...
Рейтинг: 0 / 0
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
    #38896626
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чет я тупанул ) под тегом код не работаю теги ) но я выделил то, что необходимо указать для синхронизации с UI потоком
...
Рейтинг: 0 / 0
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
    #38896740
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно, спасибо.

Roman Mejtesчет я тупанул ) под тегом код не работаю теги ) но я выделил то, что необходимо указать для синхронизации с UI потоком
http://www.sql.ru/faq/faq_topic.aspx?fid=202
Чтобы выделить часть текста, заключенного в тег SRC, есть две возможности:
1. выделить всю строку с помощью спецкода ==> в начале строки
2. выделить произвольную часть строки с помощью спецкодов >>> и
select * from >>>table1 where field = value
==>select * from table1 where field = value -- coment
Только внутри [SRC XML] это не работает. Там вообще ничего не работает.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]