我不明白为什么我会收到错误:
“System.Collections.Generic.List Notify.MainPage.webClient_OpenReadCompleted(对象, 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;
}
有谁知道我哪里出错了?
答案 0 :(得分:10)
事件处理程序的返回类型应为void:
private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
另一端没有任何东西可以接收返回数据。
答案 1 :(得分:3)
此webClient.OpenReadCompleted += webClient_OpenReadCompleted;
只是注册一个事件。当事件exicute时,它实际上不会运行该行代码。
换句话说
此
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);
}
}
答案 2 :(得分:2)
WebClient.OpenReadCompleted
是一个事件。事件处理程序是必须定义void
返回类型的委托。您的处理程序定义了返回类型List<SightingType>
。因此,您的处理程序具有错误的返回类型。
答案 3 :(得分:1)
OpenReadCompleted
事件是委托类型OpenReadCompletedEventHandler
的事件,根据其documentation,它返回一个空格:
public delegate void OpenReadCompletedEventHandler(
Object sender,
OpenReadCompletedEventArgs e
)
因此,您无法使用返回其他内容的函数。
答案 4 :(得分:0)
事件处理程序必须返回void。在您的代码中,更改:
private List webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
要
private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
应该这样做。