09-03-2012, 11:19 PM
(This post was last modified: 09-03-2012, 11:20 PM by AceInfinity.)
Code:
Public Class Form1
#Region "Form1 Constructor"
Public Sub New()
InitializeComponent()
End Sub
#End Region
'Start Here
Private Sub MainMethod()
Dim Tp = Tuple.Create("message box string", "title", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
Me.Pause(2500, New DelegateAfterDelay(AddressOf AfterDelay), Tp)
End Sub
'After the Pause, this gets raised
Delegate Sub DelegateAfterDelay(Tp As Tuple(Of String, String, MessageBoxButtons, MessageBoxIcon))
Private Sub AfterDelay(Tp As Tuple(Of String, String, MessageBoxButtons, MessageBoxIcon))
MessageBox.Show(Tp.Item1, Tp.Item2, Tp.Item3, Tp.Item4)
End Sub
End Class
Public Module DelayModule
<Runtime.CompilerServices.Extension()> _
Public Sub Pause(sender As Object, Milliseconds As Integer, DelegateMethod As [Delegate], ParamArray Params As Object())
Dim T As New Thread(Sub() PauseMethod(sender, Milliseconds, DelegateMethod, Params))
T.Start()
End Sub
Private Sub PauseMethod(sender As Object, Milliseconds As Integer, DelegateMethod As [Delegate], ParamArray Params As Object())
Dim S As Stopwatch = Stopwatch.StartNew
While S.ElapsedMilliseconds < Milliseconds
'Do Nothing
End While
DirectCast(sender, Form).Invoke(DelegateMethod, Params)
End Sub
End Module
Some code I came up with while thinking of ways to create a delay that wouldn't interfere with the UI, and wouldn't use Application.DoEvents(). Here's a cool method
Just test code, use it if you want. Ask questions if you don't understand my code. Nice extension method