Prima di esporre il mio problema faccio un saluto generale a tutti.
Detto questo vi espongo il mio problema.
Allora mi sono messo a smanettare con i thread e che ho pensato di fare? Ho fatto una semplice applicaizone in cui nel form principale ci sta una progressbar ed un bottone per l'avvio del thread che riempa sta progressbar; poi mi sono creato una classe che conteneva la funzione da gestire con thread in particolare non faceva altro che incrementare il valore della progressbar, fin qui teoricamente nessun problema ho fatto tutto, il thread lo gestisce benisismo ma la progressbar non da indicazione di scorrimento, mi spiego meglio, il valore si incrementa ma la progressbar non visualizza niente:
per chiarezza posto il codice sia del form principale sia della classe:
La prima è la classe qui ci stanno la funzione che devo mettere in thread (funzione read)
Codice:
using System;
using System.Windows.Forms;
namespace threadProgBar
{
/// <summary>
/// Description of ClassFuncThread.
/// </summary>
public class ClassFuncThread
{
public ClassFuncThread()
{
}
#region Variabili e oggetti
threadProgBar.MainForm objMF = new MainForm();
volatile bool var_continue=false;
private int i=0;
#endregion
public void set_var_continue()
{
var_continue=true;
}
public int get_valuePocBar()
{
return i;
}
public void Read()
{
while(!var_continue)
{
//progress bar in avanti
objMF.set_ProgressBar_MinMax(0,10000000);
objMF.set_ProgressBar_Value(i);
i++;
if(objMF.get_ProcessBarValue()==10000000)
var_continue=true;
}
MessageBox.Show("OK");//mi serviva come semplice prova di uscita dal while
}
}
}
ora posto il codice mainform, visivamente si vede il bottone e la progressbar ora come dicevo sopra il thread va liscio ma non mi incrementa il valore visuale della progress bar io ho pensato che è dovuto al fatto che creando un nuovo oggetto(objMF) nella classe ClassFuncThread, questo non è collegato alla progressbar nel MainForm
Codice:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
namespace threadProgBar
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
#region Funzioni set / get
public int get_ProcessBarValue()
{
return progressBar.Value;
}
public void set_ProgressBar_Value(int i)
{
progressBar.Value=i;
}
public void set_ProgressBar_MinMax(int min, int max)
{
progressBar.Minimum=min;
progressBar.Maximum=max;
}
#endregion
void Btn_AvviaThreadClick(object sender, EventArgs e)
{
threadProgBar.ClassFuncThread objCFTH = new ClassFuncThread();
Thread objThread = new Thread(objCFTH.Read);
objThread.Start();
while(!objThread.IsAlive);
progressBar.Value=objCFTH.get_valuePocBar();
Thread.Sleep(10);
// objCFTH.set_var_continue();
}
}
}
In attesa anche di un piccolo suggerimento vi ringrazio in anticipo