大家帮我解决一个关于winform问题,至于关闭窗体后仍显示调试状态。

这个是执行窗体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace 客户端
{
class 服务器
{
//声明一个int类型常量存放端口号
private const int listenPort = 11000;
public string strInfo=null;
public bool boo = true;
public void StartListener()
{
//实例化UdpClient类,接收值为端口号
UdpClient listener = new UdpClient(listenPort);
//实例化类IPEndPoint,用listenPort的端口来接收来自所有ip的信息
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
try
{
//写一个死循环监控
while (boo)
{
//声明一个byte类型数组,存放接收过来的值。
byte[] bytes = listener.Receive(ref groupEP); //ref 关键字使参数按引用传递
//获得发信人的IP
string strIP = "信息来自" + groupEP.Address.ToString();
//获得信息通过gb2312编码转化为汉字
strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length);
//return strInfo;
//MessageBox.Show(strInfo, strIP);
}
}
catch (Exception e)
{
strInfo = e.ToString();
//return e.ToString();
}
finally
{
listener.Close();
}
}
}
}
这是服务器类代码using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace 客户端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Thread thread = null;
private Thread thread1 = null;
public void Send()
{
//实例化Socket对象,指定 Socket 类的实例可以使用的寻址方案,Socket 类的实例类型以及协议类型
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//用IPAddress类型的broadcast来接收文本框中的ip
IPAddress broadcast = IPAddress.Parse(textBox1.Text);
//声明一个byte类型数组,存放要发送的值。通过gb2312编码转换为特殊字符
byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(this.textBox2.Text.ToString());
//实例化类IPEndPoint,指定ip地址以及端口号
IPEndPoint ep = new IPEndPoint(broadcast, 11000);
//发送信息
s.SendTo(sendbuf, ep);
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text != "")
{
Send();
textBox3.Text += Convert.ToString(DateTime.Now) + "\r\n" + textBox2.Text + "\r\n";
textBox2.Clear();
}
else
{
MessageBox.Show("输入内容为空!");
}
}
服务器 fwq = new 服务器();
private void Form1_Load(object sender, EventArgs e)
{
//获取本机ip
textBox1.Text = Dns.GetHostAddresses(Dns.GetHostName())[0].ToString();
thread = new Thread(new ThreadStart(fwq.StartListener));
thread.Start();
thread1 = new Thread(new ThreadStart(jiankong));
thread1.Start();
//textBox1.Text= Dns.GetHostAddresses(Dns.GetHostName())[0].ToString();
//MessageBox.Show(fwq.StartListener());
}
private void button2_Click(object sender, EventArgs e)
{
if (fwq.strInfo != null)
{
textBox3.Text += Convert.ToString(DateTime.Now) + "\r\n" + fwq.strInfo + "\r\n";
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//Application.ExitThread();
fwq.boo = false;
thread.Abort();
thread1.Abort();
this.Dispose();
}
string val = null;
public delegate void SetTextHandler(string text);
public void jiankong()
{
bool b = true;
while (b)
{
if (fwq.strInfo != null&&fwq.strInfo!=val)
{
if (textBox3.InvokeRequired)
{
SetTextHandler d = new SetTextHandler(SetText);
//this.invoke(d, new object[] { fwq.strInfo });
this.Invoke(d, new object[] { fwq.strInfo });
val = fwq.strInfo;
}
else
{
textBox3.Text += Convert.ToString(DateTime.Now) + "\r\n" + fwq.strInfo + "\r\n";
fwq.strInfo = null;
val = fwq.strInfo;
}
}
}
}
void SetText(string zhi)
{
textBox3.Text += Convert.ToString(DateTime.Now) + "\r\n" + fwq.strInfo + "\r\n";
}
}
}
这个是窗体代码谢谢各位朋友。
相关推荐
C# Winform在MDI中打开一个子窗体关闭上一个子窗体
C# Winform在MDI中打开一个子窗体关闭上一个子窗体
WinForm窗体关闭时线程安全退出实战指南
在C# WinForm应用中,窗体关闭不等于进程退出——后台线程若未协同终止,易引发串口占用、内存泄漏、日志损坏等资源泄漏问题。其本质是UI生命周期与并发任务生命周期脱钩,需基于协作式取消机制(如CancellationToken)实现可中断、可等待、可清理的退出流程。本文围绕Thread、Task、BackgroundWorker三类主流模型,解析如何在FormClosing事件中安全触发取消、设置合理超时、保障I/O资源(如SerialPort、TcpClient)可靠释放,并规避IsBackgroun
3步搞定WinForm副屏显示:告别传统多屏开发痛点!
摘要: 本文深入解析WinForm多屏开发的核心技术,针对窗体错位、跨屏拖拽卡顿等常见问题,提供3步精准定位方案(屏幕检测+坐标计算+动态交互)与5大实战技巧(智能选屏/分辨率适配/异常兜底等)。通过对比Bounds与WorkingArea差异、监听屏幕热插拔事件、优化拖拽性能等10个避坑指南,帮助开发者实现专业级多屏应用。附完整代码示例,解决副屏显示、任务栏遮挡等高频痛点,提升用户体验至工业级水准。
C# winform 子窗体调用父窗体函数实现关闭该窗体打开另一个窗体
C# winform 子窗体调用父窗体函数实现关闭该窗体打开另一个窗体;在父窗体分From1内嵌一个panel1,在panel1里载入From2,点击在子窗体From2中的按钮,清除panel1里的From2,新载入From3,点击在子窗体From3中的按钮,panel1清除,重新载入From2
WinForm 关闭子窗体时刷新父窗体的数据
WinForm 关闭子窗体时刷新父窗体的数据WinForm 关闭子窗体时刷新父窗体的数据


