读书人

怎么有效率的实现线程阻塞

发布时间: 2012-05-20 16:03:12 作者: rapoo

如何有效率的实现线程阻塞
小弟要在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)
{
}
}

[解决办法]
不会。因为你的主线程只是防止程序退出而已。

读书人网 >C#

热点推荐