如何有效率的实现线程阻塞
小弟要在c#中使用一个第三方的win32 dll中的回调方法获得数据,由于回调方法会在其被注册的线程中触发,考虑了两种方案,第一种方案在主线程中实现,问题是主线程可能还要做其它的事情,第二种实现可以把处理dll回调的这部分独立开来,问题是如何在Run()方法中实现线程阻塞以防止其退出呢?请各位兄弟指点指点
1. 在主线程中注册这些回调方法,并且用Console.Readline()等命令防止线程退出,以使得回调方法能够被触发
class A
{
public static void Main(string[] args)
{
XXHandler xx = new XXHandler(A.Callback);//callbackID是第三方dll中定义的事件id, XXHandler 则是与某个回调方法签名一致的委托
Register(3rdParty.callbackID, xx)
Console.ReadLine();
}
static void Callback(ref structA a)
{}
}
2. 在另外一个类B中开启一个线程,并在其构造函数中注册回调方法,这样回调事件在这个线程中处理,但是问题是这个线程的线程函数该如何定义以防止其退出呢,不知道在Run里面的while循环里面该放些什么东西,什么都不放好像太愚蠢了, ps:这个回调会被高频率的触发
class A
{
public static void Main(string args[])
{
B b = new B();
Console.Readline();
}
}
class B
{
XXHandler xx;
public B()
{
xx = new XXHandler(this.Callback);
Register(callbackID, xx)
Thread t = new Thread(new ThreadStart(this.Run));
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
void Run()
{
while(true)
{
//不知道在这里做什么?!
}
}
void Callback(ref structA a)
{
}
}
------解决方案--------------------
不会。因为你的主线程只是防止程序退出而已。