C#多线程操作同一个空间的问题,richTextBox
如题,多线程往richTextBox中输出内容,带有格式的,比如字体颜色,求方法,多线程操作的如果是同一个变量或者方法的话需要排队是吧,用Lock线程操作控件需要用到委托...
如题,多线程往richTextBox中输出内容,带有格式的,比如字体颜色,求方法,
多线程操作的如果是同一个变量或者方法的话需要排队是吧,用Lock 线程操作控件需要用到委托,咋搞呢? 展开
多线程操作的如果是同一个变量或者方法的话需要排队是吧,用Lock 线程操作控件需要用到委托,咋搞呢? 展开
1个回答
展开全部
不是排队不排队的问题,是WinForm中,其他线程不能直接参与UI绘制线程的工作,意思就是,你不能在别的线程中直接调用UI控件并修改它的属性等,需要用到Invoke,两个方式:
窗体使用一个timer随时监测线程中的变量变化情况,更新RichTextBox
在线程中调用一个方法,该方法可以判断UI线程是否处于更用状态,当然,如果可用,就可以调用了。
方法2需要用到的属性:
InvokeRequired :确定调用方是否位于创建控件所在的线程以外的线程中。
如果是,就需要用用委托,Action<> 或Func<>随意
如果不是,就地执行
追问
我用了delegate InvokeRequired也用了,但是多个线程不用考虑吗?
追答
线程的调度由系统安排,不用考虑
你只要在线程中发出 委托, UI线程会在(自己的)线程可用的情况下调用这个委托,就这样~
所以,在高密度运算中的时候,你不知道UI是在什么时候被更新的,应用程序会给UI线程有执行的时间片段,根据优先级等等~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询