// Methods private static IAsyncResult _BeginGetDvdInfo(DvdInfoRequestData dvdInfoRequestData, string dvdId, AsyncCallback callback, object callbackData, bool bUseEnhancedMetadata) { if (dvdInfoRequestData == null) { //if (WorkOffline) //{ // return null; //} if (string.IsNullOrEmpty(dvdId)) { return null; } dvdInfoRequestData = new DvdInfoRequestData(dvdId); if (!bUseEnhancedMetadata) { s_currentRequests[dvdId] = dvdInfoRequestData; } //string strUrl = MetadataURLForDisc(dvdId, bUseEnhancedMetadata); string strUrl = MetadataURL(bUseEnhancedMetadata)+dvdId;//.Replace("|","");//string.Format(metMetadataURLForDisc(dvdId, bUseEnhancedMetadata); uint cbMaxSize = 0x19000; AsyncCallback callback2 = bUseEnhancedMetadata ? new AsyncCallback(DvdInfo.InetStreamCallbackEx) : new AsyncCallback(DvdInfo.InetStreamCallback); bool flag = false; try { InetStream.BeginRead(strUrl, callback2, dvdInfoRequestData, cbMaxSize); } catch (WebException exception) { flag = true; if (dvdInfoRequestData != null) { dvdInfoRequestData.Exception = exception; } } catch (InvalidOperationException exception2) { flag = true; if (dvdInfoRequestData != null) { dvdInfoRequestData.Exception = exception2; } } if (flag) { CompleteTheRequest(dvdInfoRequestData, true, true); } } DvdInfoCallback dvdInfoCallback = new DvdInfoCallback(callback, callbackData); if (dvdInfoRequestData.IsCompleted) { return IssueCallback(dvdInfoRequestData, dvdInfoCallback, true); } if (callback != null) { dvdInfoRequestData.Callbacks.Add(dvdInfoCallback); } return new DvdInfoAsyncResult(dvdInfoRequestData, dvdInfoCallback.CallbackData, false); }
private static DvdInfoAsyncResult IssueCallback(DvdInfoRequestData dvdInfoRequestData, DvdInfoCallback dvdInfoCallback, bool completedSynchronously) { DvdInfoAsyncResult ar = new DvdInfoAsyncResult(dvdInfoRequestData, dvdInfoCallback.CallbackData, completedSynchronously); if (dvdInfoCallback.Callback != null) { if (completedSynchronously) { if (dvdInfoCallback != null) { dvdInfoCallback.Callback(ar); } return ar; } //TODO: rewire callback //Application.DeferredInvoke(dvdInfoCallback.Callback, new object[] { ar }); } return ar; }