2013-05-22 3 views
0

У меня есть дочерний поток, в котором событие запускается через определенное время, поэтому, когда событие запускается в дочернем потоке, как я могу уведомить об этом основной поток и вызвать функцию в основном потоке?Как уведомить главный поток события в дочернем потоке?

+0

Может быть, вы могли бы использовать [Event] (http://msdn.microsoft.com/en-us/library /aa645739%28v=vs.71%29.aspx)? (Без дополнительного контекста вы вряд ли получите какие-либо полезные ответы, вероятно, вам нужно будет использовать что-то вроде [SynchronoizationContext] (http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.aspx), но не показывая, что вы пытаетесь выполнить, я не могу быть более конкретным, чем это) –

ответ

2

Вы можете использовать WaitHandle производный класс для связи между основными и дочерними потоками:

class Program 
{ 
    static void Main(string[] args) 
    { 
     ManualResetEvent handle = new ManualResetEvent(false); 
     Thread thread = new Thread(o => 
      { 
       WorkBeforeEvent(); 
       handle.Set(); 
       WorkAfterEvent(); 
       Console.WriteLine("Child Thread finished"); 

      }); 
     thread.Start(); 

     Console.WriteLine("Main Thread waiting for event from child"); 
     handle.WaitOne(); 
     Console.WriteLine("Main Thread notified of event from child"); 

     Console.ReadLine(); 
    } 

    public static void WorkBeforeEvent() 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("Before Event"); 
    } 

    public static void WorkAfterEvent() 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("After Event"); 
    } 
} 
Смежные вопросы