使用nowait(无用户输入)显示MsgBox()不是真正的问题

时间:2014-12-11 18:35:25

标签: vb.net multithreading backgroundworker msgbox

我搜索了很多如何显示一个不会等待用户输入的消息框(按下确定或取消)。 我找到了3个解决方案。

1-在另一个帖子中显示MsgBox()或使用BackgroundWorker()

2-创建一个显示消息的表单,然后通过计时器关闭表单并使用它而不是Msgbox()

3-使用API​​ MessageBoxA()

假设我有一个从1到100的循环,我想为i显示一条消息(计数器)

当我测试以上三种方式时,我发现这不是正确的方法,我不需要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不只是一个带有标签的Form基类(lbl_message)

该代码工作正常(仅在当前显示的表单的中心显示WaitWindowForm一次,然后我更改文本)

我有3个问题:

1-如何在工作表单的右上角显示WaitWindowForm?

2-是否可以仅显示正常MsgBox()MessageBox.Show()一次,然后捕获显示的文本并进行更改?

3-哪一个适合我的问题(BackGroundWorker或Threading)以及我发布的WaitWindow类中的代码将是什么,如果我决定使用Backgroundworker或Threading而不是Application.DoEvents(更改标签文字没有显示新文本的新表格)?

一篇文章中有3个问题..哼哼..谁在乎,我不是那个会回答的人lol :)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为你真正遇到的问题是你正在尝试使用消息框来寻找不适合的东西。如果您想要不断更改的文本,只需在应用程序的右上角添加一个文本框,并在每次需要显示新消息时进行调整。

您还可以查找对话窗口(在谷歌中搜索“.showdialog()vb.net”)也可以提供帮助。