我正在製作一個管理庫的應用程序。目前,我正在編寫這些書籍的研究代碼,並且我剛剛遇到了一個問題。除了處理其餘執行的內容外,我還創建了一個處理此研究的線程。我在問自己,有沒有可能一個線程管理多種方法?如果是這樣,你怎麼能這樣做,因爲你只能在線程的聲明中放置一個方法。例如,當用戶按下搜索按鈕(在menubox中)時,我只想讓應用程序(通過我的researchThread)轉到url,運行goToUrl()方法。然後,當用戶按下搜索按鈕(在書寫本書的關鍵詞之後),我想讓同一個線程運行另一種方法(search()方法)。由於我不想爲每個功能創建一千個線程(因爲我認爲這不是正確的解決方案),我該如何處理這種情況?提前致謝。多種方法的C#線程
回答
使用Task類代替線程。不必要地使用線程。使用任務將運行您的代碼異步。您也可以使用Async and Await關鍵字。
public void Start()
{
//Create Task with parameter
Task search = new Task(() => new Action<int>(SomeSearchMethod)(4));
// Create Normal Task
Task download = new Task(SomeDownloadMethod);
// Create Task with Return value
Task<string> proccessString = Task.FromResult(SomeProcessing());
MessageBox.Show(proccessString.Result);
// Start Task
search.Start();
download.Start();
// Wait untill task finisht
search.Wait();
download.Wait();
/* or for both tasks*/
Task.WaitAll();
}
private void SomeDownloadMethod()
{
//logic
}
private void SomeSearchMethod(int value)
{
MessageBox.Show("Parameter Search" + value.ToString());
}
private string SomeProcessing()
{
return "Proccess";
}
謝謝,但如果我的方法有一個參數,我該怎麼辦。我嘗試使用某個代碼,但有一個例外,說我無法訪問該方法,因爲它被另一個線程使用。 –
@AndreaFerrando這是你的第一個問題的單獨問題 - 如果你正在訪問UI控件,你需要在創建的線程上這麼做 - 這是UI線程。關於該主題的大量關於SO的信息只是搜索。 – khargoosh
@Andrea Ferrando我更新了答案,並返回了任務和參數類 –
- 1. C++多線程類方法
- 2. 建議一種多線程方法
- 3. 許多線程,一種方法失敗
- 4. 如何使這種C#方法多線程?
- 5. GUI中的C#多線程方法
- 6. C#線程方法
- 7. 多線程方法
- 8. C#多線程 - 使用什麼方法?
- 9. C#多線程訪問單一方法
- 10. 第一種方法完成線程功能後啓動第二種方法c#
- 11. Java多線程一次運行多種方法的最簡單方法?
- 12. 元編程 - 多種方法
- 13. C#線程的方法
- 14. 多種方法的C#鎖定對象
- 15. 採用這種多線程問題的方法是什麼?
- 16. 一種使用PHP(多線程?)檢查端口的方法
- 17. 多種方法
- 18. 多線程:synchronized方法
- 19. 多線程鎖方法
- 20. 多線程類vs方法
- 21. 多線程方法php
- 22. 的Java多線程:線程將無法完成run()方法
- 23. 多線程乘法在C/C++
- 24. 單線程C多線程#
- 25. C#多線程
- 26. C#多線程
- 27. C#多線程
- 28. C++多線程?
- 29. C++多線程
- 30. C++多線程
只要瞭解[異步/等待](https://msdn.microsoft.com/en-us/library/mt674882.aspx)功能,並且不必擔心線程管理。你只能在非常特殊的情況下手動處理線程,並且從你寫的東西我猜這不是這種情況。 –