[英]C# Backgroundworker ConsoleWriteline
我有一个简单的Backgroundworker,想将结果写入控制台,也想报告该过程。
class Program
{
private static BackgroundWorker worker;
static int counter;
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
counter++;
worker.ReportProgress(counter);
}
}
static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine(counter);
}
static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
}
但是,如何将我的String(或大于1的String)提供给ReportProcess函数?
您没有将事件处理程序分配给BackgroundWorker
事件:
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.DoWork += Worker_DoWork; //here
worker.ProgressChanged += Worker_ProgressChanged; //and here
worker.WorkerReportsProgress = true;
worker.RunWorkerAsync();
Console.ReadLine();
}
干杯
您要将计数器作为第一个(int percentProgress)参数传递给ReportProgress,您可以使用e.ProgressPercentage如下例所示访问该参数。 您还可以传递第二个(对象userState)参数,该参数可以是字符串或任何其他对象,如下面的示例所示,使用e.UserState访问。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
backgroundWorker.ReportProgress(100, "Complete!");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
toolStripProgressBar.Value = e.ProgressPercentage;
toolStripStatusLabel.Text = e.UserState as String;
}
请参见https://msdn.microsoft.com/zh-cn/library/system.windows.forms.toolstripprogressbar(v=vs.110).aspx的完整示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.