假设我在某个后台线程里面要使用 Action 定义一个委托更新一个pictureBox1 的图片应该怎么写?
解决方案 »
- 有人研究过designerhosting吗?
- listview.item.clear()后再关闭程序会在dispose处报错
- 为什么在c#的com+事务中,声明并打开一个vb的数据库连接(ADODB.Connection),需要2秒时间?
- 高分(急!!!在线等)listView中有多条数据,选中其中一条数据点击button后如何使选中数据下移或上移
- ~请教C#高手~,一个简单的错误,请给予意见!
- C#中怎么样动态显示图像?
- 怎样用键盘向文本框中直接输入一个键盘上没有的ASCII字符?
- 特殊条件一求平均值,并根据所值的总和进行排列
- 如何在应用程序加载数据等待时显示一个欢迎窗体
- 具体比较一下C/S与B/S的优缺点?如果用B/S开发的话用什么工具开发好些?因为每天要有大量的数据传输(一天大约几十兆))。。。。。。。
- C#将word转化为html时提示正由另一word进程使用
- 用户控件的问题
this.Invoke(new Action(() => pictureBox1.Image = xxx));
都是一样的
并非微软故意要搞复杂,只是界面更新需要调用底层的操作系统代码,而这个过程不是线程安全的。所以必须让UI线程自己处理。之所以编译器不自动将跨线程操作的细节隐藏起来,是因为这样才是打破语法规则,同时增加复杂性的举措。也许你觉得不够简洁,但是本来C#是给程序员用的,而不是给培训班教学的玩具。
为了线程安全,微软建议你在创建控件的那个线程里更新控件,如果只是Textbox="123" ,CLR怎么知道你是想做线程安全的操作还是非线程安全的操作呢?2 “为什么一定要还要搞个委托要我们去写的这么复杂”
委托跟多线程情况下更新控件没有什么必然的关系,它只是指定了你更新控件的时候执行的具体动作。