我正在制作一个管理库的应用程序。目前,我正在编写这些书籍的研究代码,并且我刚刚遇到了一个问题。除了处理其余执行的内容外,我还创建了一个处理此研究的线程。我在问自己,有没有可能一个线程管理多种方法?如果是这样,你怎么能这样做,因为你只能在线程的声明中放置一个方法。例如,当用户按下搜索按钮(在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)功能,并且不必担心线程管理。你只能在非常特殊的情况下手动处理线程,并且从你写的东西我猜这不是这种情况。 –