2012-01-12 146 views
-1

我是C#的新手。在從另一個類中運行的線程更新WPF中的文本框時遇到問題。異常「類型'System.Object []'的對象不能轉換爲類型」

我的例外是:

類型的對象 'System.Object的[]' 不能轉換爲類型

這裏是我的表單代碼:

public void UpdateUserOnline(userOnlineClass message) 
{ 
    if(onLineTextbox.Dispatcher.CheckAccess()) 
    { 
     // The calling thread owns the dispatcher, and hence the UI element 
     for (int i = 0; i < message.user.Length; i++) 
     { 
      // this.Dispatcher.Invoke(Action) 
      onLineTextbox.AppendText("•" + message.user + "\r\n"); 
      onLineTextbox.AppendText(" ->" + message.status + "\r\n"); 
      // txtDestination.Items.Add(message.user[i]); 
     } 
    } 
    else 
    { 
     // Invokation required 
     onLineTextbox.Dispatcher.Invoke(DispatcherPriority.Normal,new UpdateUserOnlineCallback(UpdateUserOnline), new Object[] { message }); 
    } 
} 

而且這是我的Thread類中代碼的一部分:

thrMessaging = new Thread(new ThreadStart(ReceiveMessages)); 
thrMessaging.Start(); 

private void ReceiveMessages() 
{ 
    Response = null; 

    while (chatClient.Connected) 
    { 
     if (strm.DataAvailable) 
     { 
      Response = (commandClass)reciveFormatter.Deserialize(strm); 

      processMessage(Response); 
      //procProcessMessageCallback(processMessage), new object[] { Response }); 
      //ProcessMessageCallback proccess = new ProcessMessageCallback(processMessage(Response));  
     } 
    } 
}  

private void processMessage(commandClass message) 
{ 
    /* 
    if (message.money != null) 
    { 
     UpdateUserRanking((userRankingClass)message.money); 
    } 
    */ 
    if (message.online != null) 
    { 
     waitinglist.UpdateUserOnline((userOnlineClass)message.online); 
    } 
} 
+6

什麼是行拋出異常? – abatishchev 2012-01-12 15:02:42

+3

嘗試調試並找出哪一行導致問題...我認爲你的錯誤信息是不完整的... – 2012-01-12 15:05:35

+0

@abatishchev這裏 onLineTextbox.Dispatcher.Invoke(DispatcherPriority.Normal,new UpdateUserOnlineCallback(UpdateUserOnline),new Object [] {信息 } ); – 2012-01-12 15:11:26

回答

2

Dispatcher.Invoke overloads有點奇怪。有一個參數重載和一個多重參數重載,它將第一個參數從其餘參數的params數組的單獨參數中取出。使用「消息」作爲第三個參數,而不包含在數組中。

+0

+1爲Dispatcher.Invoke重載的鏈接 – Rachel 2012-01-12 15:31:09

3
onLineTextbox.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    new UpdateUserOnlineCallback(UpdateUserOnline), 
    new Object[] { message }); 

你使用了錯誤的重載方法。

您正在使用 invoke(priority,delegate,object) - 但是有一個對象數組。

,如果你想傳遞一個對象數組 - 交換你的優先級,並委託身邊,像這樣:

onLineTextbox.Dispatcher.Invoke(
    new UpdateUserOnlineCallback(UpdateUserOnline), 
    DispatcherPriority.Normal, 
    new Object[] { message }); 

超載你用期待的對象,而不是使用Object []

來源: http://msdn.microsoft.com/en-us/library/ms591596.aspxhttp://msdn.microsoft.com/en-us/library/cc647499.aspx

相關問題