C#的form1跳转到form2时候主线程怎么变化??
最近我做一个与网络有联系的项目,遇到了这么个让我头疼的问题,虽然我已经解决了,但我不知到产生的机理是什么.代码很长,为了叙述方便我把问题简化成以下模型:设有2个项目,一个...
最近我做一个与网络有联系的项目,遇到了这么个让我头疼的问题,虽然我已经解决了,但我不知到产生的机理是什么.
代码很长,为了叙述方便我把问题简化成以下模型:
设有2个项目,一个是项目Client是客户端,一个是项目Server为服务端,问题主要出现在客户端,服务端暂时不说。
客户端有两个窗口form1和form2,form1是登陆窗口,form2是聊天窗口,
此外还有一个公共类TCPConnection用于连接套接字。
登陆窗口代码里声明了一个NetworkStream类型变量NetA和一个form2类型变量F,
Form2 F = new Form2(NetA);
在form1里NetA是成功连接的,再通过一个按钮ButtonA单击事件ButtonA_Click将NetA作为参数传给了Form2 的构造函数里,并且执行以下几行代码:
F.Owner = this;
this.Hide();
F.Show();
虽然我把NetA传送给了Form2,但是我没有用到他。
问题就出现在这里了,在服务端Server项目里出了个异常提示:“远程主机关闭了已有的连接!”
这是为什么???
(我心想:不管是from1还是form2不都是在主线程里吗,我也没有用显示的代码关闭,那谁会关闭套接字连接啊,郁闷!)
然后我程序稍加改动,增加了个子线程并且用到了NetA,线程的执行体为RUN,RUN函数具体形式如下:
public void RUN()
{
......................
byte[] bu = new byte[1024];
while (true)
{
try
{
NetA.Read(bu, 0, bu.Length);
}
catch (SocketException)
{
......................
}
}
............................
}
这么一修改后居然服务端没有了异常提示了,而且经测试NetA是可用的。
言简意赅的说:form1窗体把NetA传送给form2窗体如果不用,在服务端就会提示:“远程主机关闭了已有的连接!”
反之可行。
我就更郁闷了,这是为什么???
其实我已经在form2里声明过一个NetworkStream类型变量StreamA,
form2的构造函数如下:
public Form2(NetworkStream StreamB)
{
InitializeComponent();
StreamA=StreamB;
}
在不用StreamA的情况下,只是把参数StreamB赋值给StreamA而已。
就会报错!! 展开
代码很长,为了叙述方便我把问题简化成以下模型:
设有2个项目,一个是项目Client是客户端,一个是项目Server为服务端,问题主要出现在客户端,服务端暂时不说。
客户端有两个窗口form1和form2,form1是登陆窗口,form2是聊天窗口,
此外还有一个公共类TCPConnection用于连接套接字。
登陆窗口代码里声明了一个NetworkStream类型变量NetA和一个form2类型变量F,
Form2 F = new Form2(NetA);
在form1里NetA是成功连接的,再通过一个按钮ButtonA单击事件ButtonA_Click将NetA作为参数传给了Form2 的构造函数里,并且执行以下几行代码:
F.Owner = this;
this.Hide();
F.Show();
虽然我把NetA传送给了Form2,但是我没有用到他。
问题就出现在这里了,在服务端Server项目里出了个异常提示:“远程主机关闭了已有的连接!”
这是为什么???
(我心想:不管是from1还是form2不都是在主线程里吗,我也没有用显示的代码关闭,那谁会关闭套接字连接啊,郁闷!)
然后我程序稍加改动,增加了个子线程并且用到了NetA,线程的执行体为RUN,RUN函数具体形式如下:
public void RUN()
{
......................
byte[] bu = new byte[1024];
while (true)
{
try
{
NetA.Read(bu, 0, bu.Length);
}
catch (SocketException)
{
......................
}
}
............................
}
这么一修改后居然服务端没有了异常提示了,而且经测试NetA是可用的。
言简意赅的说:form1窗体把NetA传送给form2窗体如果不用,在服务端就会提示:“远程主机关闭了已有的连接!”
反之可行。
我就更郁闷了,这是为什么???
其实我已经在form2里声明过一个NetworkStream类型变量StreamA,
form2的构造函数如下:
public Form2(NetworkStream StreamB)
{
InitializeComponent();
StreamA=StreamB;
}
在不用StreamA的情况下,只是把参数StreamB赋值给StreamA而已。
就会报错!! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询