参数计数不匹配.线程

本文关键字:线程 不匹配 参数 | 更新日期: 2023-09-27 18:20:27

我正在尝试创建一个服务器/多客户端聊天程序。客户端程序运行良好。问题出在服务器上。当我点击连接按钮时,客户端应该连接到服务器,但

An unhandled exception of type 'System.Reflection.TargetParameterCountException' occurred in mscorlib.dll 
Additional information: Parameter count mismatch.

出现,服务器程序崩溃。我很确定会发生这种情况,因为我希望服务器端程序将客户端的ip和昵称保存到2个ListBoxes中。我的活动:

        private void server_OnClientConnected(object Sender, ConnectedArguments R)
    {
        server.BroadCast(R.Name + " has connected."); //That message is shown at client's chat box. 
                                                      //So there is no problem with the connection.
        UpdateListbox(un_list, R.Name, false); //Here is the problem. It works when I comment out them, 
                                               //without updating the list boxes of course
        UpdateListbox(ip_list, R.Ip, false);
    }

当客户端连接时。

        private void server_OnClientDisconnected(object Sender, DisconnectedArguments R)
    {
        server.BroadCast(R.Name + " has disconnected.");
        UpdateListbox(un_list,R.Name,true);
        UpdateListbox(ip_list, R.Ip, true);
    }

当客户端断开连接时。

我的方法:

    public delegate void UpdateList(ListBox box,object value,bool Remove);

    private void UpdateListbox(ListBox box, object value, bool Remove)
    {
        if (box.Dispatcher.CheckAccess())
        {
            if (value != null && Remove==false)
                box.Items.Add(value);
            else if (value != null && Remove==true)
                box.Items.Remove(value);
        }
        else
        {
            box.Dispatcher.Invoke(new UpdateList(UpdateListbox), value);
        }
    }

提前感谢,George

参数计数不匹配.线程

您忘记传递bool Remove参数了。将您的线路更改为:

box.Dispatcher.Invoke(new UpdateList(UpdateListbox), new object[]{box, value, Remove});

或者,如果你想避免在未来犯同样的错误,你可以使用这个过载的lambdas:

box.Dispatcher.Invoke(() => UpdateListBox(box, value, Remove));

如果您忘记了Remove参数,您可能会收到一个编译时错误。