The UI related refreshing is handled by Main Thread. In your case, since the Main Thread is blocked in executing the while loop. It can't handle other events/UI refreshing. To avoid this, try executing the while loop in another thread.
For example check this piece of code.
Imports System.Threading
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim methodThread As New ThreadStart(AddressOf MethodToExecute)
Dim thread As New Thread(methodThread)
thread.Start()
End Sub
Private Sub MethodToExecute()
While True
If DateTime.Now.Day = 1 And DateTime.Now.Hour = 11 Then
MessageBox.Show("1st Day of Month")
End If
Thread.Sleep(New TimeSpan(1, 0, 0, 0))
End While
End Sub
End Class