请问在C#中如何实现多线程的同步与互访?
小弟初学多线程
写了个简单的程序,但是运行时提示所访问的控键不是在本线程创建的……
急于求教
谢
小弟初学多线程
写了个简单的程序,但是运行时提示所访问的控键不是在本线程创建的……
急于求教
谢
解决方案 »
- 数据库的查询条件
- 用vs2008打开一个c#的项目后有"警告 未能找到引用的组件“DevExpress.Data.v9.1”。"??
- 关于C# 创建多文档界面
- Windows2003服务器上部署VS2003开发的远程应用服务器端软件遇到的问题(急,在线等待回复)
- (年前散分)程序员都来说两句
- ######C#自定义控件问题,高手请进!######
- System.ArgumentException: 项“user instance”的值无效
- 关于正则表达式(c#)
- 用反射功能取一个方法的问题?(请思归或孟子E章帮忙)
- 求利用wpf中datagrid显示数据库中信息,并实现增删改查的项目实例。access数据库就可以
- 用C#代码 实现 key/value,不要用XML文件
- richtextbox 表格导入word中
创建委托,使用本窗体的invoke方法调用委托来操作ui对象的属性
同步简单点用lock
lock(AnyObjectMustNotBeNull)
{
//...这段代码同时只允许一个线程访问
}至于从创建线程外访问控件,两个方法:
1:
Form.Check...... = false;
我不记得了太长了,你自己点一下有得选的。
2:使用在线程中Invoke某个委托,这个委托会在控件创建的线程中执行。
比如:
private void setControl(string s)
{
textBox.Text = s;
}在某个线程中:
Invoke(setControl,new object[]{s});
你可以用control.begininvoke(method)将对UI的操作封送回UI线程,
无论是委托异步还是多线程都要这样做不然就报错,
更简单的方法是Ctrl+F5运行就不会报错了或者把Control.CheckForIllegalCrossThreadCalls = false;也可以
通过多线程为基于 .NET 的应用程序实现响应迅速的用户
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx
这个不是线程同步问题,而是线程安全问题
楼上说的正解
Invoke委托