ALERT!
Click here to register with a few steps and explore all our cool stuff we have to offer!
Home
Upgrade
Credits
Help
Search
Awards
Achievements
 4420

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

by 1UP - 10-10-2016 - 11:35 PM
#1
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

Code:
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#

Code:
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
#2
Very nice, thank you for sharing this code. Heart
Are you a guest to this site? Click the image below and sign up today!
[Image: FTYbRmR.gif]
Reply

Users browsing: 2 Guest(s)