【发布时间】:2014-12-11 18:35:25
【问题描述】:
我已经搜索了很多如何显示不会等待用户输入(按确定或取消)的 Msgbox。 我找到了 3 个解决方案。
1- 在另一个线程中显示MsgBox() 或使用BackgroundWorker()
2- 创建一个显示消息的表单,然后通过计时器关闭表单并使用它而不是 Msgbox()
3- 使用 API MessageBoxA()
假设我有一个从 1 到 100 的循环,我想为 i(counter) 显示一条消息
当我测试以上 3 种方法时,我发现这不是正确的方法,我不需要 msgbox() 在显示消息后自行关闭,因为这将显示 100 对话框。
我真正想要的是只显示 1 个 MsgBox() 并相应地更改文本。
我设法使用一个 Form() 作为类来做到这一点,我使用 Application.DoEvents 做到了这一点
我知道可以使用 BackgroundWorker 或 Threading 来完成,因为很多人建议不要使用 Application.Doevents
这是我的代码
Dim oWW As New WaitWindow With {.TopLevel = True,.TopMost = True,.StartPosition = FormStartPosition.CenterScreen}
oWW.Show(Me)
For i = 1 to 100
Threading.Thread.Sleep(500) ' Just to slowdown execution
oWW.SetMessage("Counter = " + i.ToString)
Next
oWW.Dispose()
Public Class WaitWindow
Sub SetMessage(ByVal Message As string)
lbl_message.Text = Message
Application.DoEvents
End Sub
End Class
WaitWindow 只不过是一个带有标签 (lbl_message) 的 Form 基类
该代码工作正常(仅在当前显示的表单中心显示 WaitWindowForm 一次,然后我更改文本)
我有 3 个问题:
1- 如何在工作窗体的右上角显示WaitWindowForm?
2-是否可以只显示一次正常的MsgBox()或MessageBox.Show(),然后捕获显示的文本并进行更改?
3- 哪一个适合我的问题(BackGroundWorker 或 Threading),如果我决定使用 Backgroundworker 或 Threading 而不是 Application.DoEvents,我发布的 WaitWindow 类中的代码将是什么(更改标签文本未显示带有新文本的新表单)?
一篇文章中有 3 个问题.. 嗯.. 谁在乎,我不是会回答的人,哈哈 :)
提前致谢。
【问题讨论】:
-
回滚。我会删除这个问题。
-
当我问一个不相关的问题时,应该投-2票吗?我应该认真(大声笑)投反对票吗?这都是相关的。没有兴趣从这些病态的人那里获得帮助。
-
让管理员删除它。我在这里完成了
-
"如何在工作窗体的右上角显示 WaitWindowForm?"将 TopLevel() 设置为 False,相对于客户端坐标设置适当的 Location(),然后将其添加到表单/容器的 Controls() 集合中并调用 Show()。
标签: vb.net multithreading backgroundworker msgbox