Может кто-нибудь объяснить, почему, если приложение С++ запускает компонент .NET UI (все в основном потоке), который, в свою очередь, порождает модальный диалог .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(), кажется правильным в момент запуска моей задачи. Я даже сравнил то, что возвращается в обеих ситуациях, и, похоже, нет никакой разницы.