Задача. Factory.StartNew () запускается в неправильном потоке, если открывается модальный диалог

Кто-нибудь может объяснить, почему, если приложение C ++ запускает компонент пользовательского интерфейса .NET (все в основном потоке), который, в свою очередь, порождает модальное диалоговое окно .NET, а затем пытается использовать TaskScheduler .FromCurrentSynchronizationContext (); в Task.Factory.StartNew вызовет выполнение задачи в рабочем потоке? Этого не происходит, если я не показываю диалог или сохраняю контекст вне контекста перед показом диалога.

Я пытался создать фиктивную программу, чтобы показать это, но у меня ничего не вышло. Думаю, это связано с тем, что основным процессом является COM.

Есть идеи?

Хорошо, мой код выглядит так

private void RunStateMachine(IQ4UpgraderState State)
{
    _State = State;
    Task.Factory.StartNew(() => StateMachine(), _TokenSource.Token, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
}

private void StateMachine()
{
    switch (_State)
    {
        //Some Code
    }
}

Когда задача запускается, текущим контекстом является главный поток, но когда запускается вызов StateMachine, он находится в рабочем потоке, если и только если Перед запуском этого кода я открыл модальный диалог. Контекст, возвращаемый TaskScheduler.FromCurrentSynchronizationContext (), кажется правильным в момент запуска моей задачи. Я даже сравнил то, что возвращается в обеих ситуациях, и, похоже, нет никакой разницы.

10
задан Akuma 7 December 2011 в 11:31
поделиться