J'ai un UserControl avec quelque chose qui fonctionne en arrière-plan. Quand thing a un événement terminé, auquel le contrôle utilisateur est abonné. Depuis l'événement est soulevée dans un thread séparé et le gestionnaire d'événements ne une mise à jour du contrôle utilisateur je lance le gestionnaire d'événement avec ceci:C#: comment empêcher l'échec de l'appel
private void ProcessProcessCompleted(object sender, ProcessCompletedEventArgs e)
{
if (InvokeRequired)
{
Invoke(new Action<object, ProcessCompletedEventArgs>(ProcessProcessCompleted),
new[] { sender, e });
return;
}
// Update the user control, etc.
}
Cela fonctionne bien, sauf si le formulaire qui contient le contrôle utilisateur est fermé avant que le processus ne soit terminé. J'ai essayé de vous désabonner à l'événement dans la méthode de disposition du contrôle de l'utilisateur, mais cela ne semble fonctionner que des parties du temps. Comment devrais-je faire ça? Je voudrais éviter de l'envelopper dans un bloc try catch. Y at-il une propriété InvokeIsPossible
ou quelque chose que je peux vérifier avant d'invoquer?
+1 pour relier au seul MSDN français. –
J'étais excité, n'a pas fait attention, je vais le laisser pour justifier mon +1;) – manji
version anglaise ici: http://msdn.microsoft.com/fr-fr/library/system.threading.synchronizationcontext.aspx –