我最近在做一个类似QQ聊天的软件,遇到了点问题。在QQ主窗体中打开一个聊天子窗体,在这个子窗体中向服务器发送数据,服务器收到数据后向客户端回发,客户端将收到的数据放到一个缓冲区中。在主窗体中有一个timer控件每隔一段时间读取这个缓冲区的数据,然后将处理后的数据放到一个静态变量中(这个变量在一个公共类中定义,用于窗体间共享数据)。
在刚刚打开的聊天子窗体中要用到这个静态变量的值,所以发送完数据后必须要阻塞,直到这个静态变量的值不为空才执行后面代码。现在问题来了,我不管是用Thread.Sleep()函数让这个线程睡觉还是用while循环一直读取这个变量直到不为空时跳出循环都不行。我调试过,采用这两种方式后主窗体中的timer控件就停止了,也就是这个变量没被写入,while也处于死循环状态,不知道什么原因?但我采用弹出对话框的方法就可以成功读出变量值(即MessageBox.Show("XXXX");让其发送数据后弹出一个对话框)。
各位高手谁以前碰到过这种问题,求解释,感激不尽~
PS:由于代码太乱,所有请谅解无法发上代码,但原理也就是上面说的那样。应该不是数据的问题
在刚刚打开的聊天子窗体中要用到这个静态变量的值,所以发送完数据后必须要阻塞,直到这个静态变量的值不为空才执行后面代码。现在问题来了,我不管是用Thread.Sleep()函数让这个线程睡觉还是用while循环一直读取这个变量直到不为空时跳出循环都不行。我调试过,采用这两种方式后主窗体中的timer控件就停止了,也就是这个变量没被写入,while也处于死循环状态,不知道什么原因?但我采用弹出对话框的方法就可以成功读出变量值(即MessageBox.Show("XXXX");让其发送数据后弹出一个对话框)。
各位高手谁以前碰到过这种问题,求解释,感激不尽~
PS:由于代码太乱,所有请谅解无法发上代码,但原理也就是上面说的那样。应该不是数据的问题
最好详细的看看winform的后台线程示例
http://apps.hi.baidu.com/share/detail/23346823
自己百度吧,提高快你这样问连个代码都没有,没法回答