我有一個類「黑盒子」,它代表了一個盒子,周圍我在實驗室裏各種機器進行通信。這個類是別人寫的,所以我不能看到另一個對象它的內部是如何工作的。事件處理作爲參數傳遞的對象爲
我通常使用的黑盒類的方法是通過構建一個黑箱對象,連接至所述物理框,然後添加監聽方法如下:在相同類
Blackbox b = new Blackbox("192.168.0.2");
b.messageReceived += myFunction;
然後,我通常有一些像
private void myFunction(string s)
{
// do something with s
}
這通常做工精細,每當黑盒從一臺機器得到一個消息,它與我可以處理字符串調用myFunction的。
現在,當我嘗試將黑盒傳遞給另一個窗體時,出現了這個問題,示例代碼如下(我正在編寫代碼以儘量減少(我認爲是)不相關的細節。終於成功地這樣做)。
static class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Blah());
}
}
class Blah : Form {
public Blah()
{
InitializeComponent();
Blackbox b = new Blackbox("192.168.0.2");
MyDialog md = new MyDialog(b);
md.ShowDialog();
}
}
class MyDialog : Form
{
private Blackbox b;
public MyDialog(BlackBox b) : this()
{
this.b = b;
b.messageReceived += myNewFunction;
}
private void myNewFunction(string s)
{
// this function never ends up being called
}
}
這裏的對話框中創建和幾乎所有的功能除了事件偵聽器。我可以使用其他Blackbox函數(如b.sendMessage())在MyDialog中發送機器消息。有誰知道爲什麼會發生這種情況?
而且,如果我這樣做:b.messageReceived( 「測試」)內MyDialog,myNewFunction( 「測試」)最終被調用。就好像有兩個以某種方式創建的Blackbox對象。這可能是由於Blackbox的實施或者是否有一個更基本的C#原因,爲什麼這是?
謝謝你的時間。
感謝您的回答。看來我沒有更好地提出這個問題的代碼可能讓我錯過了一些重要的東西。對我而言,沒有主要的方法,而是從另一個表單調用對話框。當我嘗試從它內部調用Application.Run()時,我得到一個「InvalidOperationException」,說我無法在單個線程中啓動第二個消息循環。我將在我的問題中編輯代碼,對此感到抱歉。 – muzzlator 2013-05-09 04:18:46