日期:2014-05-18  浏览次数:20666 次

winForm棘手的问题!高手请进
我在做一个C#应用程序,遇到这样一个问题:
假设界面有一个按钮(按钮名:连接),功能是负责将我之前事先设定的多个网址进行连接,界面上还有一个TextBox(多行的,且有滚动条),一个“关闭”按钮(关闭应用程序)
当我单击“连接”按钮时,开始连接,在这事件处理过程中要花较长的一段时间,连接信息将依次显示在TextBox中,在连接时,我不能做任何事情,包括单击“关闭”,移动整个界面,拖动TextBox滚动条。只有当我单击“连接”按钮这个事件处理结束,其它事件才能响应,我怎么解决这样的问题呢?
可能我说的不是很精炼,还请见谅!!


------解决方案--------------------
当你点链接的时候调用了方法,这个方法可以改为使用一个Delegate来调用且使用BeginInvoke方法开始一个异步调用,这们的话就不会“死了”,但这样相当于开了一个线程,所以在调用当前窗体上的控件的时候,应该使用this.Invoke调用。
------解决方案--------------------
可以用线程解决,将链接处理过程新开一个线程处理
------解决方案--------------------
添加一个线程,专门用来实现“接”的功能。
按“接”以后,调用这个线程,然后把界面的Enable设置为FALSE,
如果需要响应其它事件,在“接”的线程里实现调用事件就可。
注意:如果在非主线程中调用控件,还需要invoke方法。