B
baifeng
Unregistered / Unconfirmed
GUEST, unregistred user!
****偶刚接触.NET,不知这样的问题各位如何解决:关于同进程内的线程通信(不是一般的同步访问问题,并且涉及到System::Net::Socket异步)****(100分)<br />偶在做一个TCP的客户端,使用的System::Net::Socket,主要想实现的功能就是:连接到服务端后,发送一些信息给服务器,并且接收服务器的回应信息,再将信息显示到Form1上的richtextmemo1中.
偶做了两个类:一个是Form类就是主界面、一个是通讯类MySocket,主要是封装了System::Net::Socket的一些方法,便于Form类实例的调用.
客户端的发送,偶是通过同步的Socket.Send;
监听接收数据是通过异步的Socket.begin
Receive,当监听到数据时系统调用偶提供的回调方法ReceiveCallback,但此时ReceiveCallback方法应该是被系统的线程池内的线程调用,而不是被主线程(维护Form实例的线程)调用,并且偶不知有什么好方法在ReceiveCallback内将接收到的数据添加到Form1.richtextmemo1内,因为在另外一线程访问主线程的控件不是一个好方法(偶也不想用INVOKE之类的方法,这样设计很难看)并且在添加到richtextmemo之前还要进行一些处理.
偶有这个想法,即ReceiveCallback接收到数据,将数据写入公共静态的对象内,
然后通知主线程去读取此公共静态的对象,并把数据加入richtextmemo内,可问题是偶现在不知道怎样通知主线程(即:喂,老兄你要暂停一下手里活,来处理下这份数据)?难道非要在监听数据的线程通过SendMessage发一个消息给主线程,然后同步访问公共静态的对象不成?
偶想设计这三个类,一个是form,一个MySocket,一个将MySocket接收到数据传递给Form并且通知Form来处理的一个类(此类或许可以做为begin
Receive的State参数,哈哈).
现在问题~中间的这个类来如何设计???
偶做了两个类:一个是Form类就是主界面、一个是通讯类MySocket,主要是封装了System::Net::Socket的一些方法,便于Form类实例的调用.
客户端的发送,偶是通过同步的Socket.Send;
监听接收数据是通过异步的Socket.begin
Receive,当监听到数据时系统调用偶提供的回调方法ReceiveCallback,但此时ReceiveCallback方法应该是被系统的线程池内的线程调用,而不是被主线程(维护Form实例的线程)调用,并且偶不知有什么好方法在ReceiveCallback内将接收到的数据添加到Form1.richtextmemo1内,因为在另外一线程访问主线程的控件不是一个好方法(偶也不想用INVOKE之类的方法,这样设计很难看)并且在添加到richtextmemo之前还要进行一些处理.
偶有这个想法,即ReceiveCallback接收到数据,将数据写入公共静态的对象内,
然后通知主线程去读取此公共静态的对象,并把数据加入richtextmemo内,可问题是偶现在不知道怎样通知主线程(即:喂,老兄你要暂停一下手里活,来处理下这份数据)?难道非要在监听数据的线程通过SendMessage发一个消息给主线程,然后同步访问公共静态的对象不成?
偶想设计这三个类,一个是form,一个MySocket,一个将MySocket接收到数据传递给Form并且通知Form来处理的一个类(此类或许可以做为begin
Receive的State参数,哈哈).
现在问题~中间的这个类来如何设计???