2

我不明白为什么我会收到以下错误:

'System.Collections.Generic.List Notify.MainPage.webClient_OpenReadCompleted(object, System.Net.OpenReadCompletedEventArgs)' 的返回类型错误

代码:

webClient.OpenReadCompleted += webClient_OpenReadCompleted;

和:

private List<SightingType> webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            DataContractJsonSerializer ser = null;
            var sightingT = new List<SightingType>();
            try
            {
                ser = new DataContractJsonSerializer(typeof(ObservableCollection<SightingType>));
                ObservableCollection<SightingType> sightingTypes = ser.ReadObject(e.Result) as ObservableCollection<SightingType>;
                foreach (var sightingType in sightingTypes)
                {
                    sightingT.Add(sightingType);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            return sightingT;
        }

有谁知道我哪里出错了?

4

5 回答 5

12

事件处理程序的返回类型应为 void:

private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {

另一端没有任何东西可以接收返回数据。

于 2013-07-17T18:07:25.593 回答
3

webClient.OpenReadCompleted += webClient_OpenReadCompleted;只是注册一个事件。当事件执行时,它实际上并没有运行那行代码。

换句话说

webClient.OpenReadCompleted += webClient_OpenReadCompleted;

不等于这个

 var item = yourMethodCall();

如果您想从已完成的事件中检索信息,那么您需要创建一个属性或全局变量并在完成时分配它

因此,也许可以尝试

public List<SightingType> sightingT = new List<SightingType>();

private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
            DataContractJsonSerializer ser = null;

            try
            {
                ser = new DataContractJsonSerializer(typeof(ObservableCollection<SightingType>));
                ObservableCollection<SightingType> sightingTypes = ser.ReadObject(e.Result) as ObservableCollection<SightingType>;
                foreach (var sightingType in sightingTypes)
                {
                    sightingT.Add(sightingType);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


 }
于 2013-07-17T18:09:39.250 回答
2

WebClient.OpenReadCompleted是一个事件。事件处理程序是必须定义void返回类型的委托。您的处理程序定义了一个返回类型List<SightingType>。因此,您的处理程序具有错误的返回类型。

于 2013-07-17T18:07:25.610 回答
1

OpenReadCompleted事件是委托类型的事件OpenReadCompletedEventHandler,根据其文档,它返回一个 void:

public delegate void OpenReadCompletedEventHandler(
    Object sender,
    OpenReadCompletedEventArgs e
)

因此,您不能使用返回其他内容的函数。

于 2013-07-17T18:09:14.927 回答
0

事件处理程序必须返回 void。在您的代码中,更改:


private List webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)


private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

这应该可以解决问题。

于 2013-07-17T18:12:47.357 回答