using System; using System.Threading;namespace AutoResetEvent_Examples { class MyMainClass { //Initially not signaled. const int numIterations = 100; static AutoResetEvent myResetEvent = new AutoResetEvent(false); static int number;
static void Main() { //Create and start the reader thread. Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc)); myReaderThread.Name = "ReaderThread"; myReaderThread.Start(); for(int i = 1; i <= numIterations; i++) { Console.WriteLine("Writer thread writing value: {0}", i); number = i;
//Signal that a value has been written. myResetEvent.Set();
//Give the Reader thread an opportunity to act. Thread.Sleep(0); } //Terminate the reader thread. myReaderThread.Abort(); } static void MyReadThreadProc() { while(true) { //The value will not be read until the writer has written // at least once since the last read. myResetEvent.WaitOne(); Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number); } } } }
将阻塞当前进程
exeProcess.Start();
exeProcess.WaitForExit();
using System.Threading;namespace AutoResetEvent_Examples
{
class MyMainClass
{
//Initially not signaled.
const int numIterations = 100;
static AutoResetEvent myResetEvent = new AutoResetEvent(false);
static int number;
static void Main()
{
//Create and start the reader thread.
Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc));
myReaderThread.Name = "ReaderThread";
myReaderThread.Start(); for(int i = 1; i <= numIterations; i++)
{
Console.WriteLine("Writer thread writing value: {0}", i);
number = i;
//Signal that a value has been written.
myResetEvent.Set();
//Give the Reader thread an opportunity to act.
Thread.Sleep(0);
} //Terminate the reader thread.
myReaderThread.Abort();
} static void MyReadThreadProc()
{
while(true)
{
//The value will not be read until the writer has written
// at least once since the last read.
myResetEvent.WaitOne();
Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number);
}
}
}
}
重贴
ProcessName ProcessHandler
ProcA 0x1027
ProcB 0x0f34
基本方法
1. ProcA里面启动ProcB,同时把ProcA的handler传给ProcB
2. ProcB做完后给ProcA PostMessage
[DllImport("user32")]
private static extern IntPtr PostMessage (IntPtr hwnd, int wMsg, int wParam, int lParam);
3. ProcA只要对这个Message做相应就行了
protected override void WndProc(ref Message m)