c#控制台应用程序-在不干扰其余执行代码的情况下为(;)循环运行
我有一个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
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()中形成无限循环需要指定一些退出条件谢谢!工作完美:)谢谢!工作完美:)