2016-08-09 63 views
-1

我在C#上只是爲了練習和學習(C#中的第一個程序)而製作遊戲,我想知道是否可以讓C#讓我,而我的程序(遊戲)正在運行,以同時運行另一段代碼,這將是背景音樂(只是一些Console.Beep()基本的東西)。在主程序運行時運行一段代碼

總之,我的問題是,如果背景音樂的代碼和遊戲的代碼都可能在同一個程序中,並且如果沒有,那麼是否有簡單的方法可以使它成爲只有一個控制檯。

+7

您想要的關鍵字是[線程](https://msdn.microsoft.com/en-us /library/mt679045.aspx)。我們還爲.NET中的線程編寫了[Documentation](http://stackoverflow.com/documentation/.net/3098/threading#t=201608090136101675237) – Martheen

+0

@sebastian:Martheen是對的,學習線程 –

+0

嗨!看看這個:http://stackoverflow.com/questions/3527733/threading-implementation-c – Loaderon

回答

1

線程有很多選項。其中最簡單的只是使用任務的()

// 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元素的問題,但這是一個好的開始:)