system.reflection.targetparametercountexception несовпадение количества параметров

Я пытаюсь обновить пользовательский интерфейс, используя различные потоки и использовать процесс ниже, чтобы сделать это. Но получить вышеупомянутую ошибку во время вызова. Пожалуйста, совет это не допускается.

    delegate void SetLabelCallback(string text,string Qmgr);
    private void Set_status(string text, string Qmgr)
    {
        if (this.Status1A.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(record_count);
            this.Invoke(d, new object[] { text,Qmgr });
        }
        else
        {
            switch (Qmgr)
            {
                case "GCSSPR1A": this.Status1A.Text = text;
                    break;
                case "GCSSPR1B": this.B1_Status.Text = text;
                    break;
                case "GCSSPR2A": this.A2_Status.Text = text;
                    break;
                case "GCSSPR2B": this.B2_Status.Text = text;
                    break;
                case "GCSSPR3A": this.A3_Status.Text = text;
                    break;
                case "GCSSPR3B": this.B3_Status.Text = text;
                    break;
            }

        }

2 ответа

Я также сделал бы это так же, как Болдрик.

Он использует лямбда-выражение, и, возможно, вы бы использовали что-то вроде этого

private void Set_status(string text, string Qmgr)
{ 
    if (this.InvokeRequired)
    {
    this.Invoke(new ReceivedEventHandler(Set_status), new Object[] {text, Qmgr});                
    }
    else 
    {
    }
}

Но я не думаю, что это проблема.

Я получил эту проблему ранее, когда было несоответствие между количеством параметров в вызове обработчика / функции делегата и количеством объектов, определенных в объявлении Invoke.

this.Invoke(d, new object[] { text, Qmgr, something_missing });

Надеюсь, это поможет.

Попробуйте изменить верхнюю часть вашей функции на что-то вроде этого:

private void Set_status(string text, string Qmgr)
{
    if (this.Status1A.InvokeRequired)
    {
        this.Invoke((Action)(() => Set_status(text, Qmgr)));
    }
    else
    {

Таким образом, вам не нужно декларировать делегат и т. Д.

Другие вопросы по тегам