Gui是与params的Invoke问题

时间:2014-12-13 02:22:37

标签: c# user-interface dispatcher

以下是客户端处理程序类的一段代码。

我知道我传递的错误信息如下面的评论中所述。我只需要知道我应该通过什么来使其工作。

public static void add2ClientList(string s)
    {
        MainWindow.mainWindow.ClientListBox.Items.Add(s);

    }

    Action<string> addToClientListBox = new Action<string> (add2ClientList);

    public void addClientToPool(Client c)
    {
        if (ClientPool == null)
        {
            ClientPool = new Client[] { c };
            uiDispatcher.BeginInvoke(addToClientListBox, DispatcherPriority.Background, CancellationToken.None, TimeSpan.Zero, c.getClientIp());
// above is the issue apparently I am passing the wrong params
            return;
        }
        List<Client> temp = new List<Client>();
        foreach (Client cc in ClientPool)
        {
            temp.Add(cc);
        }
        temp.Add(c);
        ClientPool = temp.ToArray();
        uiDispatcher.BeginInvoke(addToClientListBox, DispatcherPriority.Background, CancellationToken.None, TimeSpan.Zero, c.getClientIp());

    }

2 个答案:

答案 0 :(得分:1)

似乎唯一缺少的是您传递给代表的参数,我假设您需要以下内容:

uiDispatcher.CurrentDispatcher.BeginInvoke(addToClientListBox, new object[]{"ParamString"}, DispatcherPriority.Background);

如果那不是您要求的,请告诉我:)

答案 1 :(得分:0)

Delegate d = (Action<string>)add2ClientList;
uiDispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, d, c.getClientIp());