Configuration: formulaire MDI principal avec une barre de progression et une étiquette.Winforms Mise à jour du modèle asynchrone de l'interface utilisateur - Nécessité de généraliser
Code dans la forme principale.
public delegate void UpdateMainProgressDelegate(string message, bool isProgressBarStopped);
private void UpdateMainProgress(string message, bool isProgressBarStopped)
{
// make sure we are running on the right thread to be
// updating this form's controls.
if (InvokeRequired == false)
{
// we are running on the right thread. Have your way with me!
bsStatusMessage.Caption = message + " [ " + System.DateTime.Now.ToShortTimeString() + " ]";
progressBarStatus.Stopped = isProgressBarStopped;
}
else
{
// we are running on the wrong thread.
// Transfer control to the correct thread!
Invoke(new ApplicationLevelValues.UpdateMainProgressDelegate(UpdateMainProgress), message, isProgressBarStopped);
}
}
formulaire enfant
private readonly ApplicationLevelValues.UpdateMainProgressDelegate _UpdateMainForm;
private void btnX_Click(object sender, EventArgs e)
{
_UpdateMainForm.BeginInvoke("StartA", false, null, null);
try
{
if(UpdateOperationA())
{ _UpdateMainForm.BeginInvoke("CompletedA", true, null, null); }
else
{ _UpdateMainForm.BeginInvoke("CanceledA", true, null, null); }
}
catch (System.Exception ex)
{
_UpdateMainForm.BeginInvoke("ErrorA", true, null, null);
throw ex;
}
}
Son travail assez bien, mais pour les boutons N ou N opérations que je dois écrire le même code encore et encore. Est-il possible de généraliser ou de mettre en place une autre façon de mettre à jour l'interface utilisateur?
Cela semble beaucoup mieux, je vais mettre en œuvre cette approche et mettre à jour si je deviens quelque chose sauvage !! .. merci. –