2013-08-16 23 views
0

這是另一個類中的方法,我想從我的mainform中獲取消息。調用時從一個類中的方法獲取信息到mainform?

string message = Encoding.ASCII.GetString(data); 
Console.WriteLine(message); 

我可以從主方法訂閱此方法以某種方式每次觸發該方法時獲取數據嗎?

編輯: 好了,所以這是我的代碼看起來像現在:

    } else { 
        string message = Encoding.ASCII.GetString(data); 
        DoSomething(message); 
        //Console.WriteLine(message); 
       } 
      } catch (Exception ex) { 
       Log("Error recieving data: " + ex.ToString()); 
      } 
     } 
    } 

    public delegate void SomethingHappenedHandler(string s); 
    public SomethingHappenedHandler SomethingHappened = null; 

    public void DoSomething(string message) 
    { 
     Console.WriteLine(message); 
     var sh = SomethingHappened; 
     if (sh == null) 
     { 
      sh(message); 
     } 
    } 

,並在主方法:

  dht.dhtNode.SomethingHappened += (msg) => 
     { 
      talkText.Text += "[Friend]: " + msg + "\n\n"; 
     }; 

但它不會觸發它?我還應該做些什麼來使其工作?

+4

我不清楚你想做什麼。什麼是這種其他方法?你爲什麼不能直接打電話呢?當你試圖打電話時出了什麼問題? –

+0

該方法正在另一個線程中運行,並在我得到一個udp數據包時觸發,因此我無法將其稱爲它。 – user2676748

+1

方法不是「在線程中」。你試圖怎樣稱呼它,當你做了什麼問題? –

回答

0

您可以創建委託並訂閱它。對於恩,

someInstance.SomethingHappened += (msg) => 
    { 
     //your code 
    }; 

public delegate void SomethingHappenedHandler(string s); 
public SomethingHappenedHandler SomethingHappened = null; 

public void DoSomething() 
{ 
    string message = Encoding.ASCII.GetString(data); 
    Console.WriteLine(message); 

    var sh = SomethingHappened; 
    if (sh != null) sh(message); 
} 

編輯: 並顯示結果的UI控件,你應該知道跨線程操作。 Cross-thread operation not valid

相關問題