在BackgroundWorker的doWork事件中使用Console.WriteLine [英] Using Console.WriteLine in a BackgroundWorker doWork event

查看:126
本文介绍了在BackgroundWorker的doWork事件中使用Console.WriteLine的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个控制台应用程序,它利用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆