vb.net多线程,循环导致窗口界面假死的问题同学 。。你这里的写法其实根本没有用到多线程
原因很简单
你是定义了一个T的新线程vb.net循环窗体 , 但是很可惜你在BeginDoSub这个独立的线程中又定义了一个deSomeSub的委托vb.net循环窗体 , 并且直接用Me.Invoke把实际的执行任务提交给界面主线程运行了
所以你的图片的处理函数实际上是在主线程中运行的,新线程等于没用
正确的作法是,T定义为SomeSub这个函数为入口的线程 , 并启动它
在界面进度条更改的时候再使用Invoke来调用委托来进行界面更改 。
自己再好好看看吧 , 时间问题vb.net循环窗体我要走了 。
vb.net 历遍项目的窗体Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim TheTypes As Type() = myAssembly.GetTypes()
Dim myType As Type
For Each myType In TheTypes
If myType.BaseType.ToString = "System.Windows.Forms.Form" Then
ListBox1.Items.Add(myType.Name)
End If
Next
End Sub
VS2013 vb.net 添加了多个窗体 , 可以怎么把几个窗体分类归放在一起吗可以使用数组列表(ArrayList)(数组)将同一类型vb.net循环窗体的窗体存储在同一个数组列表中vb.net循环窗体 , 引用时for each next 循环迭代
vb.net如何让两个窗体并发运行Imports System.Threading
Public Class Form1
Dim t1, t2 As Thread
Dim tt1
Private Delegate Sub voiddelegate(ByVal i As Integer)
【vb.net循环窗体 vb中循环语句怎么用】Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Form2.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
t1 = New Thread(AddressOf test)
tt1 = 1
t1.Start()
tt1 = 2
t2 = New Thread(AddressOf test)
t2.Start()
' Timer1.Start()
End Sub
Private Sub updateui(ByVal i As Integer)
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
'把循环放到线程中运行会好一些,其实主要事务是对窗体控件的操作时多线程意义不大,因为访问窗体的代码依然要在窗体线程中运行 。
Private Sub test()
Dim d As voiddelegate = AddressOf updateui
For i = 0 To 9000
Me.Invoke(d, i)
Next
End Sub
'如果放在计时器中运行效果好的多
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Static i As Integer = 0
i= 1
If i9000 Then Timer1.Stop() : i = 0
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
End Class
'如果在另一线程中用Application.run 打开窗体确实能行 , 不过窗体间相互操作不起作用,这个尚待研究中 。
VB.net循环调用同一个窗体的问题目测是 SetParent() 的锅vb.net循环窗体,你把这句注释vb.net循环窗体了,用 ShowDialog() 应该就能符合你的要求了 。
题主是想用系统 API 来模拟类似 MDI 父子窗体的结构吗?
如何给VB.NET窗体添加子窗体?直接添加一个MID父窗体或在已有窗体的属性中找到IsMDIContainer属性,然后设置为True,然后创建第二个窗体 ,需要加载子窗体的时候:
Dim NewMDIChild As New Form2
NewMDIChild.MdiParent = Me
NewMDIChild.Show()
Public Shared Sub CheckMDIChildForm(ByVal MDIForm As Windows.Forms.Form, ByVal MDIChildForm As Windows.Forms.Form, ByVal MDIChildFormName As String)
If MDIForm.MdiChildren.Length1 Then
'如果没有任何一个MDI子窗体 , 则创该MDI子窗体的窗体实例
Dim MDIChildFrm As Windows.Forms.Form = MDIChildForm ' 定义MDI子窗体
MDIChildFrm.MdiParent = MDIForm '指定父窗体
MDIChildFrm.Show() '打开窗体
Exit Sub
Else
Dim x As Integer
Dim frmyn As Boolean
For x = 0 To (MDIForm.MdiChildren.Length) - 1
Dim tempChild As Windows.Forms.Form = CType(MDIForm.MdiChildren(x), Windows.Forms.Form)
If tempChild.Name = MDIChildFormName Then
'检测到有该MDI子窗体 , 设为激活 并退出循环
frmyn = True
tempChild.BringToFront()
Exit For
Else
frmyn = False
End If
Next
If Not frmyn Then
'在打开的窗体中没检测到则新建
Dim MDIChildFrm As Windows.Forms.Form = MDIChildForm ' 定义MDI子窗体
MDIChildFrm.MdiParent = MDIForm '指定父窗体
MDIChildFrm.Show() '打开窗体
End If
End If
End Sub
vb.net循环窗体的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vb中循环语句怎么用、vb.net循环窗体的信息别忘了在本站进行查找喔 。
推荐阅读
- 区块链有什么用,区块链到底能干啥
- 怎么样组装电脑,怎么样组装电脑系统
- 如何快速获取区块链财富,怎样用区块链
- 关于hbasepostgre的信息
- 关于windows外的系统的信息
- vb时间sqlserver,Vb时间价值计算模型
- 角色扮演类冒险游戏,角色扮演 冒险
- 服务器与pc连接,电脑与服务器连接不上是啥原因?
- php对数据库的长连接 php连接数据库mysql函数