void UserStreamRead_End(IAsyncResult ar) { TransStateObjectStream stateObj = (TransStateObjectStream)ar.AsyncState; try { stateObj.UpdateContext(); int num = stateObj.UserStream.EndRead(ar); if (0 == num) //for example coping zero-length file { FinishTransferingStream(DataStream); OnDataTransfered(null, 0); OnCompleted(); stateObj.SetCompleted(); } else { DataStream.BeginWrite(_workBuffer, 0, num, new AsyncCallback(this.WriteDataStream_End), stateObj); } } catch (Exception e) { stateObj.Exception = e; stateObj.SetCompleted(); } catch { NSTrace.WriteLineError("Non-CLS exception at: " + Environment.StackTrace); throw; } }