public static Func <MemoryMappedViewStream, object, Internal.OperationStatus> Wrap(SynchronousWritingDelegateWithParameterAndResult externalDelegate) { return((MemoryMappedViewStream stream, object parameter) => { if (externalDelegate == null) { return Internal.OperationStatus.Completed; } return (Internal.OperationStatus)externalDelegate.Invoke(stream.AsRandomAccessStream(), parameter); }); }
/// <summary> /// Adds new message to the queue. This method is thread-safe. /// </summary> /// <param name="writingDelegate">Custom delegate to write using message's stream.</param> /// <param name="parameter">Delegate parameter object.</param> /// <param name="length"> /// Specifies how much memory will be allocated for new message. /// Delegate will receive a stream with capacity limited by this parameter, but it is not forced to use all allocated space. /// </param> /// <param name="timeout">Operation timeout.</param> /// <returns> /// ChannelStateOperationResult with ChannelState and OperationStatus.Completed, OperationStatus.Timeout, /// OperationStatus.DelegateFailed, OperationStatus.RequestedLengthIsGreaterThanLogicalAddressSpace, /// OperationStatus.RequestedLengthIsGreaterThanVirtualAddressSpace, OperationStatus.OutOfSpace or any OperationStatus returned by writingDelegate. /// </returns> public ChannelStateOperationResult Write(SynchronousWritingDelegateWithParameterAndResult writingDelegate, object parameter, long length, TimeSpan timeout) { return(new ChannelStateOperationResult(_internal.Write(DelegateHelper.Wrap(writingDelegate), parameter, length, timeout))); }