private static int size = 1024;
private static string clientReceiveStr = null;
private static byte[] clientReceiveBytes = new byte[size];
public delegate void getTXT();
private void Form1_Load(object sender, EventArgs e)
{
…………………… //各种连接就不写了
……………………
Thread td = new Thread(XX); //如果不开启线程,Receive()等待接收而不执行下去,就会出现你说的窗口卡住的现象
}
public void XX()
{
try
{
while (true)
{ int n = ClientSocket.Receive(clientReceiveBytes, clientReceiveBytes.Length, 0);
clientReceiveStr = Encoding.UTF8.GetString(clientReceiveBytes, 0, n);
getTXT get = new getTXT(HH); //要给textbox1赋值,因为在不同线程,所以要调用委托
}
}
catch
{
}
}
public void HH()
{
textBox1.Text = clientReceiveStr;
}
解决方案 »
- c# 自动识别验证码
- 界面上对datagridView新增、修改、删除后如何一次性更新到数据库
- C#中如何向webbrowser中flash发送左边点
- 查询数据的条数
- 请问在C#里面怎么调用Delphi的DLL中的一个输出函数并返回字符串?(在Delphi中参数是PChar类型对应C#是String吗)
- VS2005 SerialPort类操作串口发送短信
- 关于程序员待遇的问题
- 怎么限制textbox 中的输入字节数限制?未解决,在线等!!!
- 事件上传 ——————急急!!!请高手给于解答
- C# 如何改变输入面板的位置
- 高手进!关于电子枪输入问题!
- C# winform程序中如何向datagridview中添加一行
public delegate void FileHandler(Zhzhu.Model.MessageInfo arg);this.BeginInvoke(new FileHandler(SaveFile), message);//显示保存文件窗体(Control.BeginInvoke())private void SaveFile(Zhzhu.Model.MessageInfo message)
{
FileForm file = new FileForm();
file.Tag = message;
file.FileSocket = client_UdpSocket;
file.Show();
}
1.楼主在调用子窗体的时候不要再FromLode的时候做监听等操作,可以异步起新线程监听2.C#认定在线程中操作控件是不安全的行为,禁止操作的,所以要用到委托代理,网上例子很多,看看吧。