c#Delegate和Dispatcher问题

时间:2010-04-16 08:48:18

标签: c#

尝试此操作时出现此错误:

  

预期的ERROR方法名称。

我该怎么做才能解决问题

delegate void DelegateFillList(DeliveryDoc[] deliveryDocs);
private void FillListViewAssignment(DeliveryDoc[] docs) {
    if(lvMyAssignments.Dispatcher.CheckAccess()) {
        lvMyAssignments.ItemsSource = docs;
        lvAllOngoingAssignments.ItemsSource = docs;

        if(m_tempDeliveryDocs != null) {
            txtblockHandOverCount.Text = m_tempDeliveryDocs.Length.ToString();
        }

    } else {
        lvMyAssignments.Dispatcher.BeginInvoke(
            new DelegateFillList(FillListViewAssignment(docs)), null);
    }
}

4 个答案:

答案 0 :(得分:4)

这是问题所在:

new DelegateFillList(FillListViewAssignment(docs)

您不能以这种方式创建委托。您需要提供方法组,它只是方法的名称:

 lvMyAssignments.Dispatcher.BeginInvoke
     (new DelegateFillList(FillListViewAssignment), new object[]{docs});

或者,您可以用两个语句来完成:

DelegateFillList fillList = FillListViewAssignment;
lvMyAssignments.Dispatcher.BeginInvoke(fillList, new object[]{docs});

额外“换行”数组的原因是你只有一个参数,这是一个数组 - 你不希望它试图把它解释为一堆不同的参数。

答案 1 :(得分:2)

将最后一行更改为:

 lvMyAssignments.Dispatcher.BeginInvoke(
      new DelegateFillList(FillListViewAssignment), docs);

答案 2 :(得分:1)

我认为你必须在else部分指定参数..

试试这个:

lvMyAssignments.Dispatcher.BeginInvoke(new DelegateFillList(FillListViewAssignment), new object[]{docs});

已编辑 - 已包含new object[]{docs}。感谢Jon和Henk

答案 3 :(得分:0)

这一行:

lvMyAssignments.Dispatcher.BeginInvoke(
    new DelegateFillList(FillListViewAssignment(docs)), null);

请注意,您将方法调用传递给委托,而不是方法名称。将其更改为:

lvMyAssignments.Dispatcher.BeginInvoke(
    new DelegateFillList(FillListViewAssignment),  null);
                                               ^
                                               |
                                               +- removed (docs)