2013-05-16 40 views
0

我想在WPF中實現一個基本的TCP客戶端。我設法使用Windows窗體,但不能讓它在WPF中工作。我試圖回到非常基本的東西,並一點一點地加入東西。這是連接到輸出單行代碼的arduino。我可以通過telnet成功連接到它,所以問題出在我的代碼上。試圖在WPF中創建一個基本的TCP客戶端

這是我到目前爲止有:

public partial class MainWindow : Window 
{ 
    private TcpClient tcp; 
    private StreamWriter SwSender; 
    private StreamReader SrReciever; 
    private Thread thrMessaging; 
    private delegate void UpdateLogCallBack(string strMessage); 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btn_Connect_Click(object sender, RoutedEventArgs e) 
    { 
     TcpClient tcp = new TcpClient(); 
     txt_Log.AppendText("connecting"); 
     tcp.Connect(IPAddress.Parse("192.168.137.1"), 2000); 
     txt_Log.AppendText("Connected"); 
     thrMessaging = new Thread(new ThreadStart(ReceiveMessages)); 
     thrMessaging.Start(); 

    } 
    private void ReceiveMessages() 
    { 
     SrReciever = new StreamReader(tcp.GetStream()); 
     while (true) 
     { 
      string response = SrReciever.ReadLine(); 
      txt_Log.Dispatcher.Invoke(new UpdateLogCallBack(this.UpdateLog), new object[] { response }); 
     } 
    } 
    private void UpdateLog(string strMessage) 
    { 
     txt_Log.AppendText(strMessage); 
    } 
} 

}

運行這給了我在接收消息的方法錯誤。它說錯誤是在「SrReciever = new StreamReader(tcp.GetStream());」稱它爲NullReferenceException,對象引用未設置爲對象的實例。

我不是最好的編程,所以如果有一個在WPF中工作的TCP客戶端的例子,那麼這將是非常有用的。

感謝 尼克

回答

2

這完全是因爲你要創建一個在這裏範圍的變量:

private void btn_Connect_Click(object sender, RoutedEventArgs e) 
{ 
    //TcpClient tcp = new TcpClient(); 
    //this initialized a new tcp variable only here... 

    //do this instead... 
    tcp = new TcpClient(); 
    //this will assign a new TcpClient to MainWindow.tcp 

所以會發生什麼是MainWindow.tcp實際上是空,然後當ReceiveMessages是叫你試圖調用GetStream爲空值。