我是初学者! 我制作了第三方DLL(DLL_B)的包装DLL(DLL_A)。 您可以在下面找到一个简单的例子:
DLL_B类Class_B公开(我只能查看元数据中的签名):
public delegate void eveHandler(bool ret_B);
public class cls_B
{
public cls_B(string init);
public event eveHandler eve;
public void req(eveHandler reqHandler = null);
}
内部DLL_A:
public class cls_A
{
private cls_B objClsB;
private bool continueWorking = true;
public cls_A()
{
objClsB = new cls_B("test");
objClsB.ev += new eveHandler(this.eveManager);
}
public eveManager(bool ret_A)
{
continueWorking = false;
}
public request()
{
objClsB.req();
int i = 0;
While (continueWorking && i < 100)
{
//Do a lot of stuff...
i++;
}
}
}
然后在主应用程序中:
cls_A objClsA = new cls_A();
objClsA.request();
MessageBox.Show("Done!", "MyApp");
它有效,但似乎eveManager()
仅在执行objClsA.request();
之前退出MessageBox.Show("Done!", "MyApp");
时被调用。
事实上,如果我删除&& i < 100
部分,它将卡在while循环中,但我需要事件停止循环。
我哪里错了?
提前致谢!
答案 0 :(得分:0)
解决方案成立!如果我以这种方式在另一个线程上启动objClsB.req()
,它就可以工作:
public request()
{
Thread thr = new Thread(delegate() { objClsB.req(); });
thr.Start();
int i = 0;
While (continueWorking)
{
//Do a lot of stuff...
}
}