我用winform做了个有主机和客户端功能的东西,用的socket
然后在里面又套了个也是winform写的回合制游戏
我在Receive CallBack里写了调用游戏里窗口控件的办法。
问题是在连接好后,打开游戏,在游戏的Form里操作控件都没什么问题
但只有Button的visible从false=true后 游戏就会未响应。
void ReceiveCallback(IAsyncResult iar)
{
try
{
if(remoteSock == null || remoteSock.Connected == false)
{
//断线
ClientClose();
return;
}
int len = remoteSock.EndReceive(iar);
Console.WriteLine("接受到数据长度:" + len);
if (len == 0)
{
//断线
ClientClose();
return;
}
message.ReadBuffer(len, HandleMessage);
BeginReceive();
(form as Form1).round();
//round里就是button.visible=true
}
以为是线程的问题,尝试通过改控件changetext事件里改按钮状态,结果也会未响应,真的不知道是什么问题了。 求大佬帮助
跨线程调用UI,一定要用 invoke/begininvoke,不能直接调用。
在程序运行的时候,中断,进入调试,看看程序停哪里,是否有死循环。