簡體   English   中英

如何在他的包裝DLL中管理第三方DLL事件

[英]How to manage a third-party DLL event within his wrapper 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();退出時才被調用objClsA.request(); ,然后執行MessageBox.Show("Done!", "MyApp"); 實際上,如果我刪除&& i < 100部分,它將卡在while循環中,但是我需要該事件停止循環。

我哪里錯了?

提前致謝!

解決方案成立! 如果我以這種方式在另一個線程上啟動objClsB.req() ,它將起作用:

public request()
{
    Thread thr = new Thread(delegate() { objClsB.req(); });
    thr.Start();        

    int i = 0;
    While (continueWorking)
    {
        //Do a lot of stuff...
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM