-1
我在C#上只是爲了練習和學習(C#中的第一個程序)而製作遊戲,我想知道是否可以讓C#讓我,而我的程序(遊戲)正在運行,以同時運行另一段代碼,這將是背景音樂(只是一些Console.Beep()基本的東西)。在主程序運行時運行一段代碼
總之,我的問題是,如果背景音樂的代碼和遊戲的代碼都可能在同一個程序中,並且如果沒有,那麼是否有簡單的方法可以使它成爲只有一個控制檯。
我在C#上只是爲了練習和學習(C#中的第一個程序)而製作遊戲,我想知道是否可以讓C#讓我,而我的程序(遊戲)正在運行,以同時運行另一段代碼,這將是背景音樂(只是一些Console.Beep()基本的東西)。在主程序運行時運行一段代碼
總之,我的問題是,如果背景音樂的代碼和遊戲的代碼都可能在同一個程序中,並且如果沒有,那麼是否有簡單的方法可以使它成爲只有一個控制檯。
線程有很多選項。其中最簡單的只是使用任務的()
// 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);
在這種情況下,「運行」方法將在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元素的問題,但這是一個好的開始:)
您想要的關鍵字是[線程](https://msdn.microsoft.com/en-us /library/mt679045.aspx)。我們還爲.NET中的線程編寫了[Documentation](http://stackoverflow.com/documentation/.net/3098/threading#t=201608090136101675237) – Martheen
@sebastian:Martheen是對的,學習線程 –
嗨!看看這個:http://stackoverflow.com/questions/3527733/threading-implementation-c – Loaderon