在BackgroundWorker的doWork事件中使用Console.WriteLine [英] Using Console.WriteLine in a BackgroundWorker doWork event
问题描述
我有一个控制台应用程序,它利用BackgroundWorker对象,并想使用Console.WriteLine(fooBar)测试我的输出。但是,该应用程序会在应用程序执行Console.WriteLine命令时退出。
I have a console application that utilizes the BackgroundWorker object and wanted to test my output with a Console.WriteLine(fooBar). However, that application exits as the application executes the Console.WriteLine command.
这是一个watered down版本,说明了我想做什么:
Here's a watered down version that illustrates what I wanted to do:
protected static void bWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = startId; i <= endId; i++)
{
Console.WriteLine(i.ToString());
Thread.Sleep(1000);
}
}
任何想法为什么应用程序看起来像这样退出 c>
设置
WorkerReportsProgress
Any ideas why the application would appear to exit like that?
推荐答案
到 true
。订阅 ProgressChanged
这样的事件:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (var i = 0; i < 1000; i++)
{
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine(e.ProgressPercentage);
}
如果你需要传递多个int从你的后台线程到UI线程,那么你可以这样做:
If you need to transfer more than just int from your background thread to UI thread, then you could do something like this:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (var i = 0; i < 1000; i++)
{
var myObjectInstance = new MyObject{ ...};
backgroundWorker1.ReportProgress(null, myObjectInstance);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var myObjectInstance = (MyObject)e.UserState;
Console.WriteLine(myObjectInstance);
}
这篇关于在BackgroundWorker的doWork事件中使用Console.WriteLine的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!