C#写了一个客户端程序,用来连接服务器。当这个服务器是存在的时候,很容易就连接上了。可是,当服务器不存在的时候,发起连接的那4,5秒钟,软件一直都卡在那了,界面完全卡死,一直是等待连接状态,4,5秒后界面自动就不卡了。我试着开启线程来做,可是程序会推出。有什么好的办法呢。有代码也行,提供思路也好。谢谢。
首先给你解释一下两个问题的原因吧:
至于解决方法,网上的例子很多,给你找了篇文章参考下:http://blog.csdn.net/fhbcn/article/details/6167504
谢谢你的回答。例子很精彩,学习了,有时间会仔细看看。
这个问题与Socket通讯无关,你要面对的问题就是一个耗时的操作,如何避免前端界面被锁死。
通常的解决方案都是使用线程,但线程操作UI时需要特别的代码。如果不熟悉这方面的代码,
建议你先使用Backgroundworker这个组件试试,把耗时的操作写在DoWork中,注意在Dowork时,
尽量不要访问可视化控件。
谢谢你的回答。我是用线程做的。我做的是开启两个线程,一个是发起连接(之前把这个线程给去掉了,但是仍然没有解决掉问题,还是加上来了),一个是用于接收服务器端的消息,其实他有一个先后执行的问题,但是程序却是将两个线程同时执行的。所以我觉得是控制线程的执行顺序。你说的Backgroundworker应该能解决掉这个问题,但是能不能用纯代码的方式来解决呢,求指教。
@FreeEdgar:
上帝啊,接收消息是不需要用线程的啊,服务器返回消息是Event,你响应事件就行了啊。
类似这样的,甚至不需要用到线程或是Backgroundworker,
就是用异步方式发出请求,然后等待事件发生再处理就行了,界面一直是活动的。
@爱编程的大叔:接收消息不用线程怎么行,客户端是一直在不断接收服务端的消息,那不是卡死了。如果是异步的话就不需要等待了,异步的就是只管发不管对方是否收到回应。但还是要进行连接吧,要连接它也会卡的吧。异步我不是很熟悉,这是我自己的理解。有错误还希望你能指正。