Example #1
0
        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)));
 }