c#控制台应用程序-在不干扰其余执行代码的情况下为(;)循环运行

c#控制台应用程序-在不干扰其余执行代码的情况下为(;)循环运行,c#,console-application,C#,Console Application,我有一个C#控制台应用程序,当应用程序开始运行时需要立即调用函数,在本例中为ExecuteForLoop() 这就是我的C#控制台应用程序开始运行的方式: static void Main() { ExecuteForLoop(); Console.Write("Test"); } 本例中的函数ExecuteForLoop()执行以下操作: ExecuteForLoop() { int example = 0; for(;;) { exa

我有一个C#控制台应用程序,当应用程序开始运行时需要立即调用函数,在本例中为
ExecuteForLoop()

这就是我的C#控制台应用程序开始运行的方式:

static void Main()
{
    ExecuteForLoop();
    Console.Write("Test");
}
本例中的函数
ExecuteForLoop()
执行以下操作:

ExecuteForLoop()
{
    int example = 0;
    for(;;)
    {
        example++;
    }
}
问题是如果我调用
ExecuteForLoop()
函数
Console.Write(“Test”)功能不会立即执行<代码>“测试”
仅在
ExecuteForLoop()
中的
for(;;)
循环停止后才会输出到我的控制台

如何调用
ExecuteForLoop()
并继续执行代码,以使函数
控制台写入(“测试”)ExecuteForLoop()
函数中的
for(;)
循环仍在运行时,code>将输出到我的C#控制台应用程序?

使用多线程:

static void Main()
{
    var t = new Thread(() => ExecuteForLoop());
    t.Start();
    Console.Write("Test");
    t.Join() // See this answer : http://stackoverflow.com/a/14131739/4546874
}
而且,这可能不是你想要的。您确定在方法中需要无限for循环吗?如果不是,请参阅循环的
语法,并相应地设置退出条件

不会打印“Test”
,因为在前一行中调用了
ExecuteForLoop()
方法,在该方法中,程序运行在无限循环中。由于两条语句都在同一个线程中,因此除非前一条语句在同一个线程中,否则后一条语句无法执行,这当然是不可能的。

使用多线程:

static void Main()
{
    var t = new Thread(() => ExecuteForLoop());
    t.Start();
    Console.Write("Test");
    t.Join() // See this answer : http://stackoverflow.com/a/14131739/4546874
}
而且,这可能不是你想要的。您确定在方法中需要无限for循环吗?如果不是,请参阅循环的
语法,并相应地设置退出条件


不会打印“Test”
,因为在前一行中调用了
ExecuteForLoop()
方法,在该方法中,程序运行在无限循环中。由于这两条语句都在同一个线程中,因此除非前一条语句在同一个线程中,否则后一条语句无法执行,这当然是不可能的。

创建一个
线程
并在线程中运行逻辑

static void Main()
{

    Thread t = new Thread (ExecuteForLoop);          // Kick off a new thread
    t.Start();  

    Console.Write("Test");

    t.Join();  // wait for thread to exit.
}

我建议阅读关于线程的文章/博客,内容非常详细。

创建一个
线程
,并在其中运行您的逻辑

static void Main()
{

    Thread t = new Thread (ExecuteForLoop);          // Kick off a new thread
    t.Start();  

    Console.Write("Test");

    t.Join();  // wait for thread to exit.
}

我建议您阅读有关线程的文章/博客,内容非常详细。

您几乎不应该直接使用
Thread

改用。它们是更高级别的抽象,比线程更容易使用

一个简单的例子:

var backgroundTask = Task.Run(() =>
{
    Console.WriteLine("Background task started");
    while (true)
    {
        //do something
    }
});

Console.WriteLine("Back in main");
Console.ReadKey();
另一个,按键后取消任务并返回结果:

var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var backgroundTask = Task.Run(() =>
{
    Console.WriteLine("Background task started");
    long count = 0;
    while (!token.IsCancellationRequested)
    {
        count++;
    }
    Console.WriteLine("Background task cancelled");
    return count;
}, token);

Console.WriteLine("Back in main");
Console.ReadKey();
tokenSource.Cancel();
Console.WriteLine("Counter: {0}", backgroundTask.Result);
Console.ReadKey();

了解更多任务的一个很好的资源是。

您几乎不应该直接使用
线程

改用。它们是更高级别的抽象,比线程更容易使用

一个简单的例子:

var backgroundTask = Task.Run(() =>
{
    Console.WriteLine("Background task started");
    while (true)
    {
        //do something
    }
});

Console.WriteLine("Back in main");
Console.ReadKey();
另一个,按键后取消任务并返回结果:

var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var backgroundTask = Task.Run(() =>
{
    Console.WriteLine("Background task started");
    long count = 0;
    while (!token.IsCancellationRequested)
    {
        count++;
    }
    Console.WriteLine("Background task cancelled");
    return count;
}, token);

Console.WriteLine("Back in main");
Console.ReadKey();
tokenSource.Cancel();
Console.WriteLine("Counter: {0}", backgroundTask.Result);
Console.ReadKey();

了解任务更多信息的一个很好的资源是。

您需要使用Threads来研究并行
任务和同步。这一部分绝对是必须知道的。在
ExecuteForLoop()
中形成无限循环需要指定一些退出条件。您需要使用线程节省一些时间来研究并行
任务和同步。这一部分绝对不需要知道。在
ExecuteForLoop()中形成无限循环需要指定一些退出条件谢谢!工作完美:)谢谢!工作完美:)