[VB.NET][C#] Multi-...
 
Notifications
Clear all

[VB.NET][C#] Multi-thread / Crossthreading Example


1UP
Posts: 25
 1UP
Topic starter
(@1UP)
Eminent Member
Joined: 10 years ago

Someone was asking how to do multi-threading in the shoutbox and my original example didn't work because of cross-threads. This basically means I couldn't set the value of a control within a thread since it's considered a different process. Well I did manage to get it to work and I figured I'd post the code here. I will also include the source code both both the VB.net and C# versions below.

VB

Imports System.Threading
	Public Class Form1
	
	  Dim Max As Double = 600000
	  Dim i As Integer = 0
	  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	  ProgressBar1.Maximum = Max
	  Dim threadFill As Thread = New Thread(AddressOf Thread_FillProgressbar)
	  threadFill.Start()
	  End Sub
	
	
	  Private Sub Thread_FillProgressbar()
	
	  For i = 0 To Max
	  AccessControl()
	  Next
	  End Sub
	
	  Private Sub AccessControl()
	  If Me.InvokeRequired Then
	  Me.Invoke(New MethodInvoker(AddressOf AccessControl))
	  Else
	
	
	  ProgressBar1.Value = i
	  ShowInTaskbar = True
	  End If
	  End Sub
	End Class
	
	
	

C#

	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Data;
	using System.Drawing;
	using System.Linq;
	using System.Text;
	using System.Windows.Forms;
	using System.Threading;
	namespace CSharp_multithreading
	{
	  public partial class Form1 : Form
	  {
	  public Form1()
	  {
	  InitializeComponent();
	  }
	
	  int Max = 60000;
	  int i = 0;
	  private void Form1_Load(object sender, EventArgs e)
	  {
	  progressBar1.Maximum = Max;
	  Thread threadFill = new Thread(Thread_FillProgressBar);
	  threadFill.Start();
	  }
	
	  private void Thread_FillProgressBar()
	  {
	  for (i = 0; i <= Max; i++)
	  {
	  accessControl();
	  }
	  }
	
	  private void accessControl()
	  {
	  if (InvokeRequired)
	  {
	
	  Invoke(new MethodInvoker(accessControl));
	
	  }
	  else
	  {
	  progressBar1.Value = i;
	  ShowInTaskbar = true;
	
	  }
	
	
	
	  }
	  }
	}
	

VB.NET Source

C# Source

Reply
Name of the Video Game, and any other Tags