Je suis globalement d’accord avec Gimly. Ceci étant dit, je vois pas pourquoi tu créée pas directement une instance de MaClasseA dans le Main() :
[STAThread]
static void Main()
{
Application.Run(new MaClasseA());
}
Attention aussi au multi threading qui nécessite souvent un Control.Invoke(…), et plus particulièrement dans ton cas.
Là où je rejoins d’autant plus Gimly c’est que la solution que tu a choisie l’a été pour de mauvaises raisons. Et du coup je rejoins maintenant le début du thread et l’histoire des events. En gros (en pseudo code pas propre parce que j’ai pas que ca a foutre :)) :
[code]public class FrmMainApps : System.Windows.Forms.Form
{
protected MaClasseQuiProcess mcqp = new MaClasseQuiProcess()
private void InitializeComponent()
{
this.progressBar = new System.Windows.Forms.ProgressBar();
this.btnImport = new System.Windows.Forms.Button();
this.txbLog = new System.Windows.Forms.Textbox();
…
// ici ou ailleurs hein, tant que c’est pluggé avant que les données soient traitées
this.mcqp.UnTrucOccured += new UnTrucEventHandler(this.UnTrucHappened);
}
private void UnTrucHappened(string duTexte)
{
if(this.monControl.InvokeRequired)
// monControl.Invoke(...);
// note qu'y a des moyens de tout faire dans le même, mais ca sera pas forcément propre dans ton cas.
// Faudra donc passer par une autre fonction intermédiaire.
//En jouant avec Invoke tu comprendra ce que je veut dire
else
monControl.Text = duTexte;
}
}[/code]
[code]public delegate void UnTrucEventHandler();
public class MaClasseQuiProcess
{
public event UnTrucEventHandler UnTrucOccured;
public void Process()
{
// là tu fais des trucs, et quand tu a besoin de mettre à jour quelque chose :
OnUnTruc();
}
public void OnUnTruc()
{
if(UnTrucOccured != null)
UnTrucOccured();
}
}[/code]
Ca te donne plein d’avantages : tu n’a plus qu’un form, tu garde la mise à jour du form dans le form en question, et le traitement des données ailleurs. Par ailleurs, si tu veux déclencher autant de process que tu veux, du coup tu le fait dans ta classe qui process. Enfin, si la logique globale des deux classes qui processent est la même mais le traitement différent, tu peux créer une classe de base qui sera héritée par les deux et dans laquelle tu mettra le stuff commun.
Les premières tentatives à base d’event et de delegate sont souvent un peu pénibles, mais une fois que t’a choppé le coup, c’est que du bonheur.