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
{
Таким образом, вам не нужно декларировать делегат и т. Д.