VB.net 中界面与线程
先吐槽个事情
这个csdn你放在自己首面上合适吗,哥哥不吹牛,自己写的设备程序中,它有几根毛,我都查的出来。如果我对 自己写的设备软件和设备不了解,这个世界上没有人更了解这个设备和它的软件了。你搞这么句话,是想说什么 证明什么?自己哪一天被程序员骂成猪了,现在趁着这个机会讨回来吗
Vb.net中用户启动的线程是不能直接操作界面资源的。具体的说 在一个界面中 在一个按键响应程序中 PrivateSubBnTest_Click(senderAsObject,eAsEventArgs)HandlesBnTest.Click Dim_thread AsThread _thread = NewThread(AddressOfFuncThread) _thread.Start() EndSub
在线程FuncThread中不能直接调用label.text=”string” 那么如何解决这个问题呢? 这分两种情况 lFuncThread的代码与mainform在一个类中实现 lFnncThread的代码在module中,或其它不与mainform在一起的位置 第一种情况,我们可以这样处理 Public sub FuncThread() Dim showMethod As Action= AddressOf Me.DisplayToWindow showMethod() End sub Public sub DisplayToWindow() label.text=”what you want to display” End sub 这种方法中间有个委托showMethod做桥梁,实现了线程改变界面的梦想。 第二种情况,如果我们将FuncThread写在了一个module文件中,实现的方式是这样的。 第一步,在moudule文件中定义一个全局委托 Dim gDeleagteShowMethod as Action 第二步,在mainform中写好处理函数 DisplayToWindow() 第三步,在mainform中写好利用委托调用处理函数的函数 Public Sub DelegateShow() Dim myCall As Action = AddressOf Me.DisplayToWindow Me.Invoke(myCall) 'myCall() End Sub 注意这一步中不能直接调用mycall()要伤脑筋Me.Invoke(myCall) 第三步,在mainform load事件中,将委托实例化 gDeleagteShowMethod = AddressOf Me.DelegateShow 第四步,在moudule文件中调用全局委托 gDeleagteShowMethod() 实现在模块代码中修改界面的梦想。 第二种方法总结起来,就是使用了两次委托。 第一次是在mainform的load事件中让全局委托找到自己对应的实例。 第二次调用mainform的invoke方法,让mainform界面线程在自己的一个合适时间修改界面相关显示。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |