1

サーバー/マルチクライアント チャット プログラムを作成しようとしています。クライアント側のプログラムは完全に機能します。問題はサーバーにあります。[接続] ボタンをクリックすると、クライアントはサーバーに接続する必要がありますが、

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

が起動し、サーバー プログラムがクラッシュします。サーバー側のプログラムでクライアントのIPとニックネームを2つのListBoxに保存したいので、これが起こると確信しています。私のイベント:

        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);
        }

    }

前もって感謝します、ジョージ

4

1 に答える 1

1

bool Removeパラメータを渡すのを忘れました。行を次のように変更します。

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

または、将来同じ間違いを犯したくない場合は、次のオーバーロードでラムダを使用できます。

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

そこの引数を忘れていたらRemove、コンパイル時エラーを受け取っていたでしょう。

于 2013-06-28T12:28:02.670 に答える