【问题标题】:C# Backgroundworker ConsoleWritelineC# Backgroundworker 控制台写入行
【发布时间】:2016-03-20 00:58:43
【问题描述】:

我有一个简单的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)
        {

        }    
    }

但是如何将我的字符串(或多于 1 个字符串)提供给我的 ReportProcess 函数?

【问题讨论】:

  • 更改进度中的输出已更改。如,WriteLine("当前值:{0}",counter)
  • 我仍然没有输出 oO
  • 看起来您没有将进度更改功能分配给工作人员..
  • 你研究过BackgroundWorker上的哪些例子?那里有很多。 stackoverflow.com/questions/6365887/… 只是一个。
  • 它是一个但不是很清楚的一个:) 我不只是想要一些我想理解它的代码......或者理解给报告过程一个字符串然后写入控制台是多么简单。

标签: c# arrays class


【解决方案1】:

您没有将事件处理程序分配给 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();
    }

干杯

【讨论】:

    【解决方案2】:

    您将 counter 作为第一个 (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/en-us/library/system.windows.forms.toolstripprogressbar(v=vs.110).aspx查看完整示例

    【讨论】:

    • static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { Console.WriteLine(e.UserState as String); }
    • 另请查看下面 Luc Morin 的回答,以及链接中的完整示例(如果需要)。
    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多