通用异步完成方法

时间:2012-08-28 22:22:18

标签: c# silverlight asynchronous listbox

我有一个带有列表框和组合框的Silverlight页面......

根据用户在列表框中点击的内容,我想填充下拉框。已完成的事件对于列表框中的每个项目都是相同的(项目包括“BaseTypes”,“Bays”,“Face”等)

如何使完成的方法具有通用性,以便每次调用都不需要一个?

private void lstEdits_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ServiceCylinderClient obj = new ServiceCylinderClient();
    obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));

    string selectedItem = lstEdits.SelectedItem as string;

    switch selectedItem
    {
         case "BaseTypes":
           obj.GetBaseTypesCompleted += new EventHandler<GetBaseTypesCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaseTypesAsync();
           break;
        case "Bays":
           obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaysAsync();
           break;
    }
}

现在看来,我必须为每个调用都有一个“完成的方法”,但因为他们都会做同样的事情(只需设置列表框项目来源)..我想让它通用简化事情。

void GetBaseTypesCompleted(object sender, getBaseTypesCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

void GetBaysCompleted(object sender, getBaysCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

提前致谢!

2 个答案:

答案 0 :(得分:1)

我相信您需要使用反射来读取'CompletedEventArgs'中的'Result'属性,因为它们并非都来自暴露'Result'的基类型。

您应该可以执行以下操作:

lstEdits.ItemsSource = (IEnumerable)e.GetType().GetProperty("Result").GetValue(e, null);

答案 1 :(得分:0)

我认为它没有这个问题的简单解决方案,因为每个已完成的方法都有不同的EventArgs用于不同的结果。