vb.net跨线程调用 c跨线程访问控件
请教VB.net中怎么跨线程调用控件
建立委托。 Me.Invoke——同步委托 或者 Me.BeginInvoke——异步委托 例:Me.Invoke(Sub Textbox.Text="这是一个示例" End Sub)
创新互联主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务兴文,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
VB.NET 在线程里用textbox,提示 线程间操作无效: 从不是创建控件“TextBox2”的线程访问它
比如在一个窗体中的代码如下,在另一个线程中显示,隐藏窗口线程中的进度条:
Public Delegate Sub VoidDelegate() '定义委托类型
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim th1 As New System.Threading.Thread(AddressOf MyThreadProc) '声明线程
th1.Start() '启动线程运行 MyThreadProc过程
End Sub
Public Sub MyThreadProc()
Me.Invoke(New VoidDelegate(AddressOf StartProgress)) '这个是在另一个线程里调用StartProgress过程,并在创建窗口的那个线程里运行。参数是委托类型。me也可以改成控件名。如果直接调用 StartProgress,那该过程就在与MyThreadProc同一线程中运行,那么StartProgress过程中修改的控件不是在本线程创建的,就会出错。
'。。。。。。。。。
Me.Invoke(New VoidDelegate(AddressOf ShutProgress))
End Sub
Public Sub ShutProgress()
ProgressBar1.Visible = False
End Sub
Public Sub StartProgress()
ProgressBar1.Visible = True
End Sub
'不是还有个Process控件吗,好像也是用来多线程操作的,还没研究,
大神你们好,请帮我看一下这段vb.net的 Invoke代码是什么意思...
其实这行代码和C_RunCompleted(image, Nothing)的效果类似,但在BackgroundWorker中解决了“线程安全”的问题。
你可以把多线程看成几个工人同时干活。如果大家都共用一份材料,然后我给它补一块,你给它割一块,他再把其它材料焊上去,岂不是乱套了?Invoke的作用就是用一个线程模型调用方法,让主线程先放一边,这样就不会乱套了,也就是“线程安全”。你试试直接改成上面的代码,运行时会引发跨线程异常
网页标题:vb.net跨线程调用 c跨线程访问控件
文章分享:http://azwzsj.com/article/hpgsjc.html