2014-08-31 63 views
1

在循环中使用DateTime.AddSeconds命令时,我收到了奇怪的故障。 Label1应该在循环开始之前显示“NewDT”,但由于某种原因,它不会。有趣的是,在循环中添加一个MessageBox时,标签也显示了我想要的内容。DateTime.AddSeconds不会在标签上显示

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim Dt As DateTime = Now() 'It shows current datetime 
    Dim NewDT As DateTime = Now() 
    NewDT = NewDT.AddSeconds(10) 'It adds 10 seconds too the current datetime. 
    Label1.Text = NewDT 

    Do While NewDT.Second > DateTime.Now.Second 'Loops until system time matches NewDT 

    Loop 
    MsgBox("done") 
End Sub 
+0

代码为我没有msgbox正常工作。试试这个'Label1.Text = NewDT.ToString' – 2014-08-31 14:54:19

+0

a)你的循环是比较秒,而不是时间; b)你的循环内没有任何东西。如果您*更改了标签,则循环必须在表单更新之前完成。使用'label1.Refresh'强制更新。 – Plutonix 2014-08-31 14:58:12

+0

得到它的工作。谢谢。那么我只是使用循环来让程序等待,直到时间匹配。我知道这并不理想。有没有更好的解决方案? – 2014-08-31 15:01:52

回答

2

没有故障。

WM_PAINT消息已排队,但仅在您“离开”该功能后才处理。

当您显示模态消息框(MsgBox)时,为什么它工作原因是对话框调用Application.DoEvents,它使应用程序能够处理排队的消息。

1

问题是,标签的文本将不会更新,直到子的结尾。 在Label1.Text = NewDT行之后,添加Label1.Refresh(),然后在循环开始之前显示NewDT。

如果您想要更理想的解决方案,可以使用Sleep method

+0

非常感谢!完美的作品! Eminem帮我解决问题,一天不能好转;) – 2014-08-31 14:59:52