C#多线程操作同一个空间的问题,richTextBox

如题,多线程往richTextBox中输出内容,带有格式的,比如字体颜色,求方法,多线程操作的如果是同一个变量或者方法的话需要排队是吧,用Lock线程操作控件需要用到委托... 如题,多线程往richTextBox中输出内容,带有格式的,比如字体颜色,求方法,
多线程操作的如果是同一个变量或者方法的话需要排队是吧,用Lock 线程操作控件需要用到委托,咋搞呢?
展开
 我来答
u2sTar
推荐于2016-04-27 · TA获得超过278个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:200万
展开全部

不是排队不排队的问题,是WinForm中,其他线程不能直接参与UI绘制线程的工作,意思就是,你不能在别的线程中直接调用UI控件并修改它的属性等,需要用到Invoke,两个方式:


  1. 窗体使用一个timer随时监测线程中的变量变化情况,更新RichTextBox

  2. 在线程中调用一个方法,该方法可以判断UI线程是否处于更用状态,当然,如果可用,就可以调用了。


方法2需要用到的属性:

InvokeRequired :确定调用方是否位于创建控件所在的线程以外的线程中。

如果是,就需要用用委托,Action<> 或Func<>随意

如果不是,就地执行

追问
我用了delegate   InvokeRequired也用了,但是多个线程不用考虑吗?
追答
线程的调度由系统安排,不用考虑

你只要在线程中发出 委托, UI线程会在(自己的)线程可用的情况下调用这个委托,就这样~

所以,在高密度运算中的时候,你不知道UI是在什么时候被更新的,应用程序会给UI线程有执行的时间片段,根据优先级等等~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式