Если я вас правильно понял, вы спрашиваете, как выполнить код, запущенный в потоке, в другой поток.то есть: у вас есть два потока, в то время как вы выполняете код второго потока, который вы хотите выполнить в первом потоке.
Вы можете достичь этого с помощью SynchronizationContext
, например, если вы хотите выполнить код издругой поток в основной поток, вы должны использовать текущий контекст синхронизации:
private readonly System.Threading.SynchronizationContext _currentContext = System.Threading.SynchronizationContext.Current;
private readonly object _invokeLocker = new object();
public object Invoke(Delegate method, object[] args)
{
if (method == null)
{
throw new ArgumentNullException("method");
}
lock (_invokeLocker)
{
object objectToGet = null;
SendOrPostCallback invoker = new SendOrPostCallback(
delegate(object data)
{
objectToGet = method.DynamicInvoke(args);
});
_currentContext.Send(new SendOrPostCallback(invoker), method.Target);
return objectToGet;
}
}
Пока вы находитесь во втором потоке, при использовании этого метода будет выполняться код в основном потоке.
вы можете реализовать ISynchronizeInvoke"System.ComponentModel.ISynchronizeInvoke".проверьте этот пример.
Редактировать: Из-за того, что вы используете консольное приложение и поэтому не можете использовать SynchronizationContext.Current
.тогда вам, вероятно, нужно создать свой собственный SynchronizationContext
, , этот пример может помочь.