WPF: Asynchrone barre de progression
Je suis en train de créer une barre de progression qui va travailler de manière asynchrone pour le processus principal. Je me suis créé un nouvel événement et l'invoque cependant à chaque fois que j'essaie alors d'effectuer des opérations sur la barre de progression, j'obtiens l'erreur suivante:
"Le thread appelant ne peut pas accéder à cet objet, car un autre thread possède"
Le code suivant est une tentative pour envoyer une instance de la barre de progression à l'événement comme un objet, il est évident qu'elle a échoué, mais il vous donne une idée de ce à quoi ressemble le code.
private event EventHandler importing;
void MdbDataImport_importing(object sender, EventArgs e)
{
ProgressBar pb = (ProgressBar)sender;
while (true)
{
if (pb.Value >= 200)
pb.Value = 0;
pb.Value += 10;
}
}
private void btnImport_Click(object sender, RoutedEventArgs e)
{
importing += new EventHandler(MdbDataImport_importing);
IAsyncResult aResult = null;
aResult = importing.BeginInvoke(pbDataImport, null, null, null);
importing.EndInvoke(aResult);
}
Quelqu'un aurait-il des idées de comment faire cela.
Merci d'avance
SumGuy.
OriginalL'auteur SumGuy | 2009-07-20
Vous devez vous connecter pour publier un commentaire.
Vous devriez utiliser quelque chose comme cela
dans votre boucle while
1) au Lieu d'Invoquer l'utilisation BeginInvoke (vous ne voudriez pas que votre traitement en arrière-plan de l'attente du thread jusqu'à ce que GUI obtient redessiné, le feriez-vous?) 2) Ne pas essayer de mettre à jour les progrès de chaque microseconde, choisissez une intervalle.
OriginalL'auteur Arsen Mkrtchyan
Vous avez besoin de déléguer pbDataImport à l'expéditeur. Seul le GUI-répartiteur peut apporter des modifications aux contrôles d'interface utilisateur graphique 🙂
OriginalL'auteur cwap
J'ai regardé plus loin et l'asynchrone de la méthode de travail ainsi que la méthode suivante à partir de MSDN.
En XAML:
En C#:
Mon problème est que j'ai été l'exécution d'une procédure stockée quand j'ai voulu la barre de progression à effectuer et c'est le processus de suivi et rend donc la barre de progression un peu de la foutaise, même lorsque asynchrone.
Je suppose que les autres possiblilty serait de rendre la procédure stockée actions asynchrone, ce que vous en pensez?
Cheers,
SumGuy
Modifier (17 Mai 2010)
Il semble que beaucoup de gens sont intéressés par ce post, donc je pensais que je voudrais ajouter ceci. J'ai trouvé un super morceau qui décrit travail Asynchrone dans WPF dans le détail avec un savoureux peu sur les barres de progression:
http://www.codeproject.com/KB/WPF/AsynchronousWPF.aspx
OriginalL'auteur SumGuy
J'aime en utilisant MVVM et un BackgroundWorker un peu mieux. Voici un exemple de cela.
Une Barre de Progression à l'aide de WPF du Contrôle ProgressBar, BackgroundWorker, et MVVM
OriginalL'auteur Rhyous