TcpChannel停止监听后,再重新打开监听为何出现下列错误: 未处理的“System.Threading.ThreadStateException”类型的异常出现在 mscorlib.dll 中。其他信息: 线程正在运行或被终止;它无法重新启动 代码如下:
//***************单击“运行”按钮***************
private void cmdRun_Click(object sender, System.EventArgs e)
{
IChannel[] channels=ChannelServices.RegisteredChannels;
if (channels.Length==0)
{
RemotingConfiguration.Configure(@"..\..\MWCServer.config"
}
else
{
foreach(IChannel eachChannel in channels)
{
if(eachChannel.ChannelName=="tcp")
{
TcpChannel tcpChannel=(TcpChannel)eachChannel;
tcpChannel.StartListening(null); }
}
}
}//***************单击“停止”按钮***************
private void cmdStop_Click(object sender, System.EventArgs e)
{
IChannel[] channels=ChannelServices.RegisteredChannels;
foreach(IChannel eachChannel in channels)
{
if(eachChannel.ChannelName=="tcp")
{
TcpChannel tcpChannel=(TcpChannel)eachChannel;
tcpChannel.StopListening(null);
}
}
}
//***************单击“运行”按钮***************
private void cmdRun_Click(object sender, System.EventArgs e)
{
IChannel[] channels=ChannelServices.RegisteredChannels;
if (channels.Length==0)
{
RemotingConfiguration.Configure(@"..\..\MWCServer.config"
}
else
{
foreach(IChannel eachChannel in channels)
{
if(eachChannel.ChannelName=="tcp")
{
TcpChannel tcpChannel=(TcpChannel)eachChannel;
tcpChannel.StartListening(null); }
}
}
}//***************单击“停止”按钮***************
private void cmdStop_Click(object sender, System.EventArgs e)
{
IChannel[] channels=ChannelServices.RegisteredChannels;
foreach(IChannel eachChannel in channels)
{
if(eachChannel.ChannelName=="tcp")
{
TcpChannel tcpChannel=(TcpChannel)eachChannel;
tcpChannel.StopListening(null);
}
}
}
解决方案 »
- System.NullReferenceException: 未将对象引用设置到对象的实例?
- 循环打印数据超过一定数量,控制台显示不完全
- 求一种高效率的代码写法
- 求救 如何将excel中的数据写入access数据库中
- 自定义panel时 在重载方法里画边框时 用的相同的画笔 出现上边框和左边框 比有边框 和下边框 宽度要大 源码在帖子里面 希望指点
- web form 如何对GridView进行空绑定(显示标题兰和边框,数据就不用显示了)?
- 请高手指引~迷路的初学者
- C#可以直接编译成机器代码吗?
- 如何把图片放到指定的WORD位置,如何设置该位置的图片的板式为 悬浮在文字上面
- 关于MDI窗口???
- 將記錄集導出到Excel問題
- 本人有一书上MRP例子 求共同分析者 留下MSN 谢谢
{
IChannel[] channels=ChannelServices.RegisteredChannels;
foreach(IChannel eachChannel in channels)
{
if(eachChannel.ChannelName=="tcp")
{
TcpChannel tcpChannel=(TcpChannel)eachChannel;
tcpChannel.StopListening(null);
ChannelServices.UnregisterChannel(tcpChannel);
}
}
}
Remoting的通讯服务也是由Socket提供的,而且是Managed Socket
tcpChannel.StartListening和tcpChannel.StopListening调用,实际上是在用于监听的Socket上调用了Listen和Close方法而这里为了防止阻塞当前线程,用于监听的Socket必须在别的线程上。这样不是直接使用了多线程,就是使用了异步。而异步也是由多线程实现的