.NET TCP异步接收(发送,连接)的回调函数是在子线程里面吗?
主线程如要执行显示接收到的数据到TextBox,是不是采用Invoke调用函数。
------解决思路----------------------
需要invoke,引用:
回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象、全局函数等)时,将一些参数传递给对象,同时将一个调用者可以访问的函数地址传递给该对象。这个函数就是调用者和被调用者之间的一种通知约定,当约定的事件发生时,被调用者(一般会包含一个工作线程)就会按照回调函数地址调用该函数。
这种方式,调用者在一个线程,被调用者在另一个线程。
------解决思路----------------------

反正UI的线程肯定是不行的..
其代码应该是酱紫的.
public void ReceiveMessage(IAsyncResult ar)
{
var client= ar.AsyncState as Socket;
var length = client.EndReceive(ar);
byte[] data= new byte[length];
Array.Copy(buffer, data, length);
listBox1.Invoke(new Action(() =>{
ListBox1.items.insert(0,string.jion("-",data.select(d=>d.tostring("x2")).toarray());
}));
}
差不多了..
最后面手写的 可能有错误....
------解决思路----------------------
是在线程池开的新线程,回调都是这么个机制,丢到额外的线程去执行的,这也就是不会卡死你当前线程的原因。
------解决思路----------------------
异步操作不一定是在子线程中回调,完全由调用的线程来决定是在自己的线程中回调还是在子线程中回调。但是一般来说,设计这样的“异步回调”的程序流程,它非常适合多线程编程,因为这样的流程的设计思想就是让注册委托回调的人考虑“有可能在子线程中回调”而进行程序设计。
通常我会使用 BeginInvoke,而不是Invoke。
委托对象是一个你自定义的对象,它将你的方法封装为一个对象,然后可以作为参数传递,它本身跟子线程没有什么直接关系。