Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException? / 5 сообщений из 5, страница 1 из 1
05.03.2015, 15:06
    #38896112
WinterGraveyard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
ведь в документации вроде как сказано, что для 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
05.03.2015, 15:58
    #38896210
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
WinterGraveyard,

первая задача будет запущена в другом потоке, отличном от гуевого. Соответственно, продолжение будет в этом же потоке, не в гуевом.
...
Рейтинг: 0 / 0
05.03.2015, 21:43
    #38896625
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
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
05.03.2015, 21:44
    #38896626
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
чет я тупанул ) под тегом код не работаю теги ) но я выделил то, что необходимо указать для синхронизации с UI потоком
...
Рейтинг: 0 / 0
06.03.2015, 06:15
    #38896740
WinterGraveyard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException?
Понятно, спасибо.

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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему при TaskContinuationOptions.ExecuteSynchronous вылетает InvalidOperationException? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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