J'utilise un BackgroundWorker et je fais cela :
private void loadNewAsyncToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Text = "RunWorkerAsync()";
backgroundWorkerLoading.RunWorkerAsync();
}
private void backgroundWorkerLoading_DoWork(object sender, DoWorkEventArgs e)
{
UnsafeThreadMethod("hello");
EvenUnsaferThreadMethod();
}
Et maintenant les deux méthodes.
private void UnsafeThreadMethod(string text)
{
toolStripLabelRssFeedData.Text = text;
}
private void EvenUnsaferThreadMethod()
{
panelLoading.Visible = true;
}
Je ne comprends pas pourquoi UnsafeThreadMethod
ne lève pas l'exception suivante mais EvenUnsaferThreadMethod
fait.
L'opération inter-filière n'est pas valide : Le contrôle 'panelLoading' a été accédé à partir d'un thread autre que le > thread sur lequel il a été créé.
Selon le message, c'est parce que toolStripLabelRssFeedData
a été créé sur le même fil mais il ne l'a pas été.
Je pensais que je ne pouvais pas appeler les contrôles créés par le thread principal et que je devais utiliser la fonction ProgressChanged
événement. Que se passe-t-il ?
Et j'ai une deuxième question. Quel est l'avantage de faire comme ça alors que je peux utiliser ProgressChanged
? Que dois-je faire ?
private void EvenUnsaferThreadMethod()
{
if (panelLoading.InvokeRequired)
{
panelLoading.Invoke(new MethodInvoker(() => { EvenUnsaferThreadMethod(); }));
}
else
{
panelLoading.Visible = true;
}
}