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
Bookmarks