[VB.Net] Time Delay While Keeping UI Functional (Delegates, Invocation, Threads)

AceInfinity

Emeritus, Contributor
Joined
Feb 21, 2012
Posts
1,728
Location
Canada
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())
		For i As Integer = 1 To Milliseconds
			Thread.Sleep(1)
		Next
		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 :)

:thumbsup2:
 
Last edited:
Re: [VB.Net] Time Delay While Keeping UI Functional (Delegates, StopWatch, Threads)

That is very nice. Thanks for sharing :)
 
Re: [VB.Net] Time Delay While Keeping UI Functional (Delegates, StopWatch, Threads)

No problem, thanks for the feedback :)
 

Has Sysnative Forums helped you? Please consider donating to help us support the site!

Back
Top