gpt4 book ai didi

.net - 多线程循环卡住ui

转载 作者:行者123 更新时间:2023-12-03 13:19:31 24 4
gpt4 key购买 nike

我在应用程序中使用多线程编程遇到麻烦。
实际上,代码看起来像这样:

Private Delegate Sub IniciarDiscagemDelegate()

Private Sub CallBack()
'do some stuff....
ThreadDiscagem = New Threading.Thread(AddressOf IniciarDiscagem)
ThreadDiscagem.IsBackground = True
ThreadDiscagem.Start()
End Sub

Private Sub IniciarDiscagem()
If Me.InvokeRequired() Then
Me.BeginInvoke(New IniciarDiscagemDelegate(AddressOf IniciarDiscagem))
Exit Sub
End If
Do While True
'This boolean is used to control navigation. I set false to it whenever the current entry is closed by the user.
If Not blnEntryAlreadyOpen Then LookForNewEntries()
Loop
End Sub

Private Sub LookForNewEntries()
Dim blnFoundIt As Boolean = False
Do While Not blnFoundIt
blnFoundIt = DatabaseMethod()
Loop
'Some code that would change UI behavior, show some controls and hide others.
End Sub

Private Sub DataBaseMethod()
'Code that looks for new entries at the DB
return true
End Sub

尽管有一些条目可供使用,但代码可以完美运行。用户界面运行良好,用户可以导航。问题是,当没有可用的条目时,应用程序卡在“LookForNewEntries”循环中,并冻结了整个UI。

是否应该不冻结UI,因为此循环直接从线程而不是主线程运行?

找不到针对此问题的任何解决方法,有人可以给我提示吗?

谢谢!

最好的祝福。

最佳答案

实际上,您实际上是在主线程中运行它。

此语句是您的问题:

If Me.InvokeRequired() Then
Me.BeginInvoke(New IniciarDiscagemDelegate(AddressOf IniciarDiscagem))
Exit Sub
End If

您正在调用方法,这将使其在主线程上运行。在修改主线程上的内容之前,不应该使用调用。因此,现在删除该段代码。

例如,如果要更改 TextBox的文本,则需要调用。

.NET 4.0及更高版本的示例:
If Me.InvokeRequired Then
Me.BeginInvoke(Sub() TextBox1.Text = "Done")
End If

.NET 3.5及更低版本的示例:
If Me.InvokeRequired Then
Me.BeginInvoke(New IniciarDiscagemDelegate(AddressOf <method to perform changes here>))
End If

关于.net - 多线程循环卡住ui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com