在主程序运行时运行一段代码

时间:2016-08-09 01:32:58

标签: c#

我正在C#上进行游戏,只是为了练习和学习(C#中的第一个程序),我想知道C#是否有可能让我,而我的程序(游戏)正在运行同时运行另一段代码这将是背景音乐(只是一些Console.Beep()基本的东西)。

简而言之,我的问题是,背景音乐的代码和游戏的代码是否可能在同一个程序中,如果没有,是否有一种简单的方法可以在一个控制台。

1 个答案:

答案 0 :(得分:1)

线程有很多选择。其中一个最简单的就是使用Task()

// Here I store the token for future use
processMe = new MyBackgroundProcess(ERPManager.CancellationTS.Token);

var aTask = new Task(() =>
{ // Everything here runs on another thread
  processMe.Run();
}, ERPManager.CancellationTS.Token);

在这种情况下,“Run”方法将在separte线程上运行。

“令牌”用于取消任务。 “processMe”存储引用并询问“我被取消了吗?”

例如,假设Run()就像

public void Run()
{
  while (! token.IsCancellationRequested)
  {
    PlayMusicSlice();
  }
}

所以你检查一下它是否被取消了。完成后,你只需要做一个

ERPManager.CancellationTS.Cancel()

在你的主线上。

你可以玩

之类的东西
List<Task> tasks = new List<Task> ();
tasks.Add(new Task(() => Process1.Run(), aCancellationToken));
tasks.Add(new Task(() => Process2.Run(), aCancellationToken));
tasks.Add(new Task(() => Process3.Run(), aCancellationToken));

然后再做

Task.WaitAll(tasks.ToArray());

或者

Task.WaitAny(tasks.ToArray());

然后查询状态

if (tasks[0].IsCompleted()) { ... }
if (tasks[0].IsFaulted()) { ... }

您将面临许多问题,如并发性和访问UI元素的问题,但这是一个良好的开端:)