为什么线程池要到结束才完成任务?

时间:2019-06-10 09:52:17

标签: c#

我创建了一个非常简单的程序,并使用线程池同时执行3个任务。在此方法1中,同一条消息将打印9000次(由于使用循环),方法2和3rd将一条消息打印1次。现在的问题是,方法1仅打印几次消息,然后程序停止执行。 有时无法显示结果。

我知道,如果前台线程将完成任务,则所有后台任务将停止工作。但是可接受的程序如何在不完成任务的情况下停止工作。

using System;
using System.Threading;

namespace ThreadingInCSharp
{
    class Program
    {
        static void Main()
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(Method_1));
            ThreadPool.QueueUserWorkItem(new WaitCallback(Method_2));
            ThreadPool.QueueUserWorkItem(new WaitCallback(Method_3));
            Thread.CurrentThread.IsBackground = false;
        }

        private static void Method_1(object obj)
        {
            for (int i = 0; i < 9000; i++)
            {
                Console.WriteLine("It's method 1");
            }
        }
        private static void Method_2(object obj)
        {
            Console.WriteLine("It's method 2");
        }
        private static void Method_3(object obj)
        {
            Console.WriteLine("It's method 3");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Content

该行将无济于事,因为没有其他指令可以等待。

只需添加ContentControl和Main的末尾。

<ContentControl Content="{x:Bind CustomContent, Mode=OneWay}" />

如果要等待所有线程完成,则可以使用<local:fold_panel> <local:fold_panel.CustomContent> <Button Content="Second" /> <local:fold_panel.CustomContent> </local:fold_panel> 之类的线程同步对象。

StackPanel

StackPanel将等待,直到所有三个事件都已发出信号(即方法已完成其工作)。