J'ai regardé msdn et des questions similaires d'échange de pile pour savoir comment utiliser les travailleurs de fond. Fondamentalement, ma fonction upload-programme fait le travail actuel, mais je veux un thread pour changer les éléments de l'interface utilisateur comme il va (barres de progression, etc) et que j'évalue les événements à modifier. Ce que j'ai essayé est ci-dessous (durement édité), cela ne fonctionne pas et le programme semble couper après l'appel à runworkerasync. Y a-t-il quelque chose de faux ou est-ce que j'ai eu tort d'envoyer ma commande "à l'autre thread"?Un autre travailleur de fond
BackgroundWorker backgroundUpload = new System.ComponentModel.BackgroundWorker();
Le premier bit est l'appel:
if (backgroundUpload.IsBusy != true)
{
backgroundUpload.RunWorkerAsync(work);
// a command here for debug purposes (eg a message box) will run
}
else
{ //it doesn't go here, this isn't the error}
Alors le DoWork, il ne semble jamais arriver.
private void backgroundUpload_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = UploadProgram((Workload)e.Argument, worker, e); //workload is one of my enums
}
ne semble jamais arriver non plus.
bool UploadProgram(Workload work, BackgroundWorker worker, DoWorkEventArgs e)
{
}
//also there is progress changed and run worker complete.
Je suppose que vous faites, mais vous avez une décélération du DoWork délégué de l'événement? C'est à dire. backgroundUpload.DoWork + = nouveau DoWorkEventHandler (UploadProgram); –
Eh bien c'était simple. Bien joué tout le monde, j'ai des sentiments mitigés. –