来讨论一个异步操作的问题 现有一Client类的全局实例g_client,Client有一批Get开头的成员函数,GetXXX使用已经建立连接的socket发送请求并接收数据,GetXXX可能在各种窗口操作中调用(不并发),调用GetXXX大多数情况下允许阻塞,小部分不允许阻塞。GetXXX函数可以很复杂,但调用时代码要尽量精简。这种不允许阻塞的应如何设计? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 backgroudworker对同一个对象操作时候要lock 定义个 delegate ,参数列表和返回类型和 GetXXX 方法一致,再异步调用,比如:int GetXXX(int a){ // ......}delegate int Action(int a);调用:Action ac = GetXXX;ac.BeginInvoke(参数, null, null); av的方法很好。m_client.BeginConnect(ConnectCompleted, m_client);但在ConnectCompleted中操作界面时会提示:线程间操作无效,从不是创建控件的线程访问它。 因为是异步,所有在有对界面控件操作的地方要加上该控件.Invoke((MethodInvoker)(() =>{ // 对控件的直接操作 ,比如 控件.Text = 字符串,放在这里 // 其他任何不是对控件的直接操作都别放这里})); 正要找这个Invoke+拉姆,太感谢了,结帖。 C#如何打开设置Excel为修订模式?Word的修订属性能设置。 GID问题 FileUpload上传文档的格式转换问题 构析函数 简单问题,关于选择 aspx.net+c# web开发中,实现全键盘操作 帮看看这段代码! 50元求购c#.net的一小段代码 C# 怎么实现多重压缩文件的解压啊? vs2005如何开始一个使用c#得asp.net webform项目,我安装vs2005得时候只是选择了c#? AE System._ComObject 编译 winform实现这一的效果: 软件启动起来后 弹出图片 三秒然后关闭
对同一个对象操作时候要lock
比如:
int GetXXX(int a)
{
// ......
}delegate int Action(int a);调用:
Action ac = GetXXX;
ac.BeginInvoke(参数, null, null);
m_client.BeginConnect(ConnectCompleted, m_client);
但在ConnectCompleted中操作界面时会提示:线程间操作无效,从不是创建控件的线程访问它。
该控件.Invoke((MethodInvoker)(() =>
{
// 对控件的直接操作 ,比如 控件.Text = 字符串,放在这里
// 其他任何不是对控件的直接操作都别放这里
}));