📄 invokeonstaserverchannelsink.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 + -