2014-12-02 85 views
0

我是初學者! 我做了第三方DLL(DLL_B)的包裝DLL(DLL_A)。 下面你可以找到一個simplyfied例如:如何管理他的封裝器DLL中的第三方DLL事件

的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()僅在執行MessageBox.Show("Done!", "MyApp");之前從objClsA.request();退出時才被調用。 事實上,如果我刪除&& i < 100部分它將卡在while循環中,但我需要該事件停止循環。

我在哪裏錯了?

提前致謝!

+0

您所描述的行爲反映你已經發布的代碼。目前還不清楚你想要發生什麼。 – 2014-12-02 14:31:27

+0

嗨!當Cls_B發生一個事件時,我需要這個事件,它從這個時候退出。謝謝 – Mark 2014-12-02 14:35:06

+0

如果刪除&& i <100',會發生什麼? – thepirat000 2014-12-02 14:36:31

回答

0

解決方案成立!它的工作原理,如果我開始在另一個線程的objClsB.req()這樣:

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

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