Это возможно, но было бы неловко и трудно получить права.Лучший способ добиться этого - использовать сопрограммы .Единственный механизм в .NET, который в настоящее время соответствует парадигме сопрограммы, - это итераторы C # через ключевое слово yield return
.Вы могли бы теоретически взломать что-то вместе, что позволяет при выполнении метода переходить из одного потока в другой 1 .Тем не менее, это было бы не чем иным, как достойным взломом блога, но я думаю, что это возможно. 2
Следующий лучший вариант - перейти на Async.CTP .Эта функция будет доступна в C # и позволит вам делать именно то, что вы просите.Это достигается элегантно с помощью предлагаемого ключевого слова await
и некоторых хитрых подвигов, которые также будут включены.Конечный результат будет выглядеть примерно так:
public async void SomeMethod()
{
// Do stuff on the calling thread.
await ThreadPool.SwitchTo(); // Switch to the ThreadPool.
// Do stuff on a ThreadPool thread now!
await MyForm.Dispatcher.SwitchTo(); // Switch to the UI thread.
// Do stuff on the UI thread now!
}
Это всего лишь один из множества злых крутых приемов, которые вы можете сделать с новым ключевым словом await
.
1 Единственный способ фактически внедрить выполнение кода в существующий поток - это если цель специально предназначена для принятия инъекции в виде рабочего элемента.
2 Вы можете увидеть мой ответ здесь за одну такую попытку имитировать ключевое слово await
с помощью итераторов.Платформа MindTouch Dream является еще одним, возможно, лучшим вариантом.Дело в том, что должно быть возможно переключение потоков с помощью какого-то гениального взлома.