程序为什么不监听呢?

fengforever 2004-10-26 10:19:29
程序思想如下:
------------------------------
原来的程序
------------------------------
Form Load时创建一个新的进程并且开始执行
listenerRun = true;
thread = new Thread(new ThreadStart(Listen));
thread.Start();
这个进程所执行的Listen的内容如下:
tcpl = new TcpListener(tcpPort);
tcpl.Start();
while(listenerRun)
{
Socket s = tcpl.AcceptSocket();
Byte[] strem = new byte[80];
int i = s.Receive(strem);
string message = System.Text.Encoding.UTF8.GetString(strem);
TBContent.AppendText(message);
}
监听从端口tcpPort接收到的信息,可以成功

然后我修改了一下程序,想用一个Timer控件的方式来执行这个监听
------------------------------
修改过的程序
------------------------------
Form Load时仍然创建这个新的进程并且开始执行
thread = new Thread(new ThreadStart(Listen));
thread.Start();
只不过现在的Listen改为触发Timer控件为True
tcpl = new TcpListener(tcpPort);
tcpl.Start();
ListenTimer.Start();
private void ListenTimer_Tick(object sender, System.EventArgs e)
{
Socket s = tcpl.AcceptSocket();
Byte[] strem = new byte[80];
int i = s.Receive(strem);
string message = System.Text.Encoding.UTF8.GetString(strem);
TBContent.AppendText(message);
}
但是这个时候好像根本就没有在监听端口啊,发过来的消息都接收不到
ListenTimer.Start();和ListenTimer.Enabled = true;都不可以执行

请问怎么办?
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengforever 2004-10-26
  • 打赏
  • 举报
回复
to Lastcsdner(外行)
我把程序改成这样
Thread floatThread = new Thread(new ThreadStart(ShowFloat));
floatThread.Start();
其中这个ShowFloat是这样的
private void ShowFloat()
{
FloatForm floatform = new FloatForm();
floatform.Show();
}
可是这样的话新窗口总是闪一下就消失了
这个线程自动被释放掉了
怎么办才能让它不消失或者过一段特定时间后再消失呢?
多谢
lglesias 2004-10-26
  • 打赏
  • 举报
回复
up
Lastcsdner 2004-10-26
  • 打赏
  • 举报
回复
floatform.Show();
这个东东是堵塞的,如何一边显示窗口一边还要干其它的,这个窗口需要另外再启动一个线程来显示。
fengforever 2004-10-26
  • 打赏
  • 举报
回复
我现在还有一个疑问,在最开始的这个里面
我想设置成每接受一条消息就显示另外一个Form
所以程序就改成了
while(listenerRun)
{
Socket s = tcpl.AcceptSocket();
Byte[] strem = new byte[80];
int i = s.Receive(strem);
string message = System.Text.Encoding.UTF8.GetString(strem);
TBContent.AppendText(message);
FloatForm floatform = new FloatForm();
floatform.Show();
}
可是这里这个floatform显示出来就没有了响应
是floatform没有响应,不是主程序没有响应
这是为什么呢?
fengforever 2004-10-26
  • 打赏
  • 举报
回复
那应该是怎样的一个设计思想呢?
linaren 2004-10-26
  • 打赏
  • 举报
回复
进程所执行的Listen的中的
while(listenerRun)
{
Socket s = tcpl.AcceptSocket();
Byte[] strem = new byte[80];
int i = s.Receive(strem);
string message = System.Text.Encoding.UTF8.GetString(strem);
TBContent.AppendText(message);
}

去掉。
eradium 2004-10-26
  • 打赏
  • 举报
回复
Accept和Receive都是阻塞方法,干吗要放到Timer里面????
定时重复执行,等于是多个线程一起控制tcpListener,那还不乱套了。
Tomgus 2004-10-26
  • 打赏
  • 举报
回复
Time到时间执行的,
所以执行ListenTimer_Tick函数完,就关闭监听了
xxdneu 2004-10-26
  • 打赏
  • 举报
回复
你为什么要用timer呢, tcpListener.AcceptSocket本来就是阻塞执行的,你还用timer,这有什么用吗
fengforever 2004-10-26
  • 打赏
  • 举报
回复
没人帮忙吗?

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧