我创建了一个非常简单的程序,并使用线程池同时执行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");
}
}
}
答案 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
将等待,直到所有三个事件都已发出信号(即方法已完成其工作)。