2009-08-17 21 views
9

¿Cómo puedo informar una cadena (como "ahora buscar archivo ...", "selección encontrada ...") a mi windows.form desde un backgroundWorker, así como un porcentaje. Además, tengo una gran clase que contiene el método que quiero ejecutar en backgroundWorker_Work. Puedo llamarlo por Class_method(); pero no puedo informar el porcentaje realizado ni nada de la clase llamada, solo del método backgroundWorker_Work.C# backgroundWorker informa cadena?

Gracias!

Respuesta

22

Asumo WCF también tienen el método

public void ReportProgress(int percentProgress, Object userState); 

Entonces sólo tiene que utilizar el userState para informar de la cadena.

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
//report some progress 
e.ReportProgress(0,"Initiating countdown"); 

// initate the countdown. 
} 

Y obtendrá que "El inicio de la cuenta atrás" cadena de nuevo en caso ProgressChanged

private void worker_ProgressChanged(object sender,ProgressChangedEventArgs e) 
{ 
    statusLabel.Text = e.UserState as String; 
} 
0

utilice un delegado.

9

Puede usar el parámetro userState del método ReportProgress para informar de las cadenas.

He aquí un ejemplo de MSDN:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // This method will run on a thread other than the UI thread. 
    // Be sure not to manipulate any Windows Forms controls created 
    // on the UI thread from this method. 
    backgroundWorker.ReportProgress(0, "Working..."); 
    Decimal lastlast = 0; 
    Decimal last = 1; 
    Decimal current; 
    if (requestedCount >= 1) 
    { AppendNumber(0); } 
    if (requestedCount >= 2) 
    { AppendNumber(1); } 
    for (int i = 2; i < requestedCount; ++i) 
    { 
     // Calculate the number. 
     checked { current = lastlast + last; } 
     // Introduce some delay to simulate a more complicated calculation. 
     System.Threading.Thread.Sleep(100); 
     AppendNumber(current); 
     backgroundWorker.ReportProgress((100 * i)/requestedCount, "Working..."); 
     // Get ready for the next iteration. 
     lastlast = last; 
     last = current; 
    } 

    backgroundWorker.ReportProgress(100, "Complete!"); 
} 
Cuestiones relacionadas