如何在其包装器DLL中管理第三方DLL事件

时间:2014-12-02 14:23:51

标签: c# visual-studio-2010 events dll

我是初学者! 我制作了第三方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循环中,但我需要事件停止循环。

我哪里错了?

提前致谢!

1 个答案:

答案 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...
    } 
}