我是Windows Phone开发人员。我刚刚开始使用异步调用。这是我获取一些元数据的代码。关于它的一些观点:
cskeys
有5个值有两个功能,GetMetaData
和GetFolder_MetadataCallback
:
private void GetMetadata()
{
try
{
foreach (string folderpath in CSKeys)
{
if (!string.IsNullOrEmpty(folderpath))
{
HttpWebRequest FolderMetadataRequest = (HttpWebRequest)WebRequest.Create(new Uri(URL + folderpath));
FolderMetadataRequest.Method = DisplayMessage.HeadMethod;
FolderMetadataRequest.Headers[DisplayMessage.Header_Authorization] = Authentication_Parameters[DisplayMessage.Username] + DisplayMessage.Colon +
Authentication_Parameters[DisplayMessage.JSessionID];
FolderMetadataRequest.Headers[DisplayMessage.Header_Cookie] = Authentication_Parameters[DisplayMessage.SessionCookie];
FolderMetadataRequest.BeginGetResponse(new AsyncCallback(GetFolder_MetadataCallback), FolderMetadataRequest);
}
}
}
catch (Exception ex)
{
}
}
private void GetFolder_MetadataCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest FolderReq = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse FolderResponse = (HttpWebResponse)FolderReq.EndGetResponse(asynchronousResult);
if (FolderResponse.StatusCode == HttpStatusCode.OK)
{
System.Net.WebHeaderCollection folderMedataCollection = FolderResponse.Headers;
Dictionary<string, string> FolderMetadata_Header = new Dictionary<string, string>();
FolderMetadata_Header.Add(DisplayMessage.UniqueID_Key, folderMedataCollection[DisplayMessage.UniqueID_Value]);
FolderMetadata_Header.Add(DisplayMessage.Actual_Name_Key, folderMedataCollection[DisplayMessage.Actual_Name_Value]);
FolderMetadata_Header.Add(DisplayMessage.Display_Name_Key, folderMedataCollection[DisplayMessage.Display_Name_Value]);
FolderMetadata_KeyValues.Add(FolderPath, FolderMetadata_Header);
}
app.Storage_Parameters.Add(DisplayMessage.Metadadata_StorageKey, FolderMetadata_KeyValues);
}
catch (Exception ex)
{
}
}
对于第一,第二和第三keyvalue(CSKey)
我得到了答复。我得到了所有的值,它也被添加到FolderMetadata_Keyvalues
。有时对于第四和第五个密钥(CSKey),我得到一个Value cannot be null parameter
异常。为什么呢?
答案 0 :(得分:0)
即使我获得了所有的价值,我也找到了我的例外原因。我在foreach中提出了每个值的请求。因为它是异步调用,所以在调用完成之前发送每个值的请求。(即对于foreach中的第一个值,请求被发送到回调,在它完成第二个值请求之前被发送到回调函数)。因为这个过程发生了异常。
解决方案是,对于异步调用中的foreach语句,要么必须处理wait方法,直到回调完成第一个值请求,或者在回调函数中第一个值的响应之后必须发送第二个值的请求。