2014-12-29 47 views
0

我試圖從服務器調用客戶端和一個字符串傳遞到客戶端的功能或文本添加到客戶端文本框 - 沒有什麼作品,代碼運行,但沒有任何反應(該客戶端連接到服務器沒有問題)是什麼問題?謝謝。 //服務器SignalR不火的客戶端的功能

class Hub:hub 
{ 
     public void sendClientIdToServer() 
     {    
      Clients.Caller.getFeedBack("hey");   
     } 
} 

//客戶

private async void connectToServer() 
     {   
      Connection = new HubConnection(LocalClient);   
      HubProxy = Connection.CreateHubProxy("ConnectByHub"); 
      //try to call another function and pass to the function a string. 
      HubProxy.On("getFeedBack", (msg) => Invoke((Action)(() => { getFeedBack(msg); }))); 
      // try to add text to richTextBox 
      HubProxy.On<string>("getFeedBack", (msg) => Invoke((Action)(() => { MsgTxtBox.Text = msg; }))); 
      try 
      {    
       await Connection.Start();    
      } 
      catch (Exception ex) 
      { 
       Invoke((Action)(() => { connectStat.Text = "Error Not connected"; })); 
       return; 
      } 
      Invoke((Action)(() => { connectStat.Text = "connected ClientA"; }));            
     } 

    //function 


public void getFeedBack(string message){ 

      string test = message; 

     } 

回答

0

簡單。 客戶端的「方法」沒有定義像一個正常的方法。

看一看here

滾動至底部。看看他們如何定義客戶的方法。對於WPF客戶端代碼

例如,用於從服務器調用參數方法

stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => 
    Dispatcher.InvokeAsync(() => 
     { 
      textBox.Text += string.Format("Stock update for {0} new price {1}\n", stock.Symbol, stock.Price); 
     }) 
); 

好吧,如果你正在使用的WinForms,代碼會有點不同,但非常類似(從鏈接直接引用)太:)


*編輯

試試這個: 變化

HubProxy.On<string>("getFeedBack", (msg) => Invoke((Action)(() => { MsgTxtBox.Text = msg; }))); 

HubProxy.On<string>("getFeedBack", (msg) => 
    this.Invoke(new MethodInvoker(delegate 
    { 
     MsgTxtBox.Text = msg; 
    })); 
}); 
+0

感謝您的回答: )但我沒有發現任何區別。 – Damkulul

+0

editted the answer – Kiong

+0

好吧,我試過你的答案,但仍然沒有什麼變化:-(HubProxy.On (「getFeedBack」,msg => Dispatcher.CurrentDispatcher.InvokeAsync(()=> { MsgTxtBox.Text = msg; })); – Damkulul

0

在集線器,你寫:

HubProxy.On("getFeedBack", (msg) => Invoke((Action)(() => { getFeedBack(msg); }))); 

「getFeedBack」 這裏是方法服務器調用客戶端。

你應該在你的代碼更改:

服務器:

class Hub:hub 
{ 
    public void sendClientIdToServer() 
    {    
     Clients.Client(Context.ConnectionId).getFeedBack("hey");   
    } 
} 

客戶:

HubProxy.On("getFeedBack"); 

還從服務器訂閱:

HubProxy.On<string>("getFeedBack", (msg) => 
this.Invoke(new MethodInvoker(delegate 
{ 
    MsgTxtBox.Text = msg; 
})); 
});