成都网站建设设计

将想法与焦点和您一起共享

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://chengdu.cdxwcx.cn/article/hpgsjc.html