⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invokeonstaserverchannelsink.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
//     <version>$Revision: 915 $</version>
// </file>

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Windows.Forms;
using System.Runtime.Remoting.Messaging;
using System.IO;

namespace CustomSinks
{
	class InvokeOnSTAServerChannelSink: BaseChannelSinkWithProperties, IServerChannelSink
	{
		IServerChannelSink nextSink;

		public InvokeOnSTAServerChannelSink(IServerChannelSink nextSink)
		{
			this.nextSink = nextSink;
		}

		void IServerChannelSink.AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, ITransportHeaders headers, System.IO.Stream stream)
		{
			nextSink.AsyncProcessResponse(sinkStack, state, msg, headers, stream);
		}

		System.IO.Stream IServerChannelSink.GetResponseStream(IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, ITransportHeaders headers)
		{
			return nextSink.GetResponseStream(sinkStack, state, msg, headers);
		}

		IServerChannelSink IServerChannelSink.NextChannelSink {
			get { 
				return nextSink; 
			}
		}

		ServerProcessing IServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
		{
			if (Application.OpenForms.Count > 0) {
				IMessage outResponseMsg = null;
				ITransportHeaders outResponseHeaders = null;
				Stream outResponseStream = null;
				ServerProcessing returnValue = ServerProcessing.Complete;
				Application.OpenForms[0].Invoke(new EventHandler(delegate
				{
					returnValue = nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out outResponseMsg, out outResponseHeaders, out outResponseStream);
				}));
				responseMsg = outResponseMsg;
				responseHeaders = outResponseHeaders;
				responseStream = outResponseStream;
				return returnValue;
			} else {
				return nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
			}
		}

		System.Collections.IDictionary IChannelSinkBase.Properties {
			get {
				return this.Properties;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -