全局线程 改变窗体控件值,改变不了或者出错

泡面的幸福 2018-01-06 03:55:18
有一个窗体,form1 ,窗体上有一个按钮一个文本框,Button1和textbox1 有一个模块:Module1
目的:按下按扭,启动线程,调用模块一个过程,过程通过委托,改变窗体上文本框的值,textbox1.text="123"
环境:framework 4.61
按扭代码入下:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As New Thread(AddressOf read)
i.IsBackground = True


i.Start()
End Sub

Module1代码如下:
Module Module1
Private Delegate Sub mydelpad()
Public Sub read()
Dim readstr() As String

Try
While True

Dim str As String = "ReplyReplyuser&true"

If str <> "" Then
readstr = str.Split("&")
If readstr(0) = "ReplyReplyuser" Then
Dim retRepl As Boolean = readstr(1)
If retRepl = True Then

Dim bby As New mydelpad(AddressOf Returncontrolvalue)


Form1.Invoke(bby)
Exit While

End If


End If



End If

End While
Catch ex As Exception

End Try




End Sub
Public Sub Returncontrolvalue()

Form1.TextBox1.Text = "123"

End Sub
End Module
...全文
631 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
vb.net 中你如果写 Form1,那么 vb.net 给你创建了一个 Form1 窗体对象实例。这是从 vb6、vb5 继承来的特性,应该是最早为了吸引 vb 程序员使用 vb.net 而做的设计。 但是这个 Form1 是你的 form1 吗?从你的描述上看不出来。所以还是不要使用这个 vb.net 诡异的“方言”特性。
水哥阿乐 2018-01-06
  • 打赏
  • 举报
回复
不合理的用法太多了,楼上说得没错,需要补充一下线程方面的基础知识
  • 打赏
  • 举报
回复
你的代码中,可以为计算方法定义参数来传入窗体,例如
Public Sub read(form1 as Form1)
........
End Sub
然后准确地写 form1.Invoke(bby)。
  • 打赏
  • 举报
回复
vb.net 从 vb5、vb6继承了诡异的语法
Form1.
这个时候,你创建的 Form1 并不是你创建的之前的那个 Form1 对象,不能找到正确的窗口对象。 不要使用这个语法。
exception92 2018-01-06
  • 打赏
  • 举报
回复
线程中,同一个窗体上改变控件的值可以使用Invoke/Begininvoke,这样不会出现跨线程错误,更新不成功的话也有可能是没有值,调试程序了。
泡面的幸福 2018-01-06
  • 打赏
  • 举报
回复
有人会吗?有人会吗?

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧