我需要什么代表和线程?C#代表和线程!
C#代表和线程!
回答
代表充当逻辑(但安全),相当于函数指针;他们允许您以抽象的方式谈论操作。这个典型的例子是事件,但我会用更多的“函数编程”的例子:在列表中搜索:
List<Person> people = ...
Person fred = people.Find(x => x.Name == "Fred");
Console.WriteLine(fred.Id);
的“拉姆达”在这里本质上是一种委托的实例 - 一个委托类型Predicate<Person>
- 即“给予一个人,是真实的还是错误的”。使用代表允许非常灵活的代码 - 即List<T>.Find
方法可以根据呼叫者通过的委托来找到各种事情。
以这种方式,它们在很大程度上的作用类似于1方法接口 - 但更为简洁。
代表用于动态地向事件添加方法。
线程在进程内运行,并允许您一次运行共享资源的2个或更多任务。
代表们做的比这多很多...... – 2009-01-21 23:15:48
我建议您搜索这些条款,那里有很多信息。他们是非常基本的概念,维基是一个高层次的起点:
http://en.wikipedia.org/wiki/Thread_(computer_science)
http://en.wikipedia.org/wiki/C_Sharp_(programming_language)
具体的例子总是帮助我,所以这里是一个线程。考虑你的网络服务器。当请求到达服务器时,它们被发送到Web服务器进程进行处理。它可能会处理每个到达,完全处理请求和生成页面之前,转向下一个。但是请考虑在硬盘驱动器速度(而不是CPU速度)下进行多少处理,因为在完成响应之前请求的页面从磁盘中提取(或从数据库中提取数据)。
通过从线程池中提取线程并为每个请求提供自己的线程,我们可以在磁盘返回第一个数据之前处理数百个请求的非磁盘需求。这将允许一定程度的虚拟并行性,可以显着提高性能。请记住,Web Server的性能还有很多,但这应该给你一个关于线程如何有用的具体模型。
你的问题是含糊不清......
但你可能只是想知道如何使用它们,以便有一个窗口,一个耗时的过程运行和进度条...
因此,创建一个线程来完成耗时的过程,并使用委托来增加进度条! :)
它们用于高级语言有用的相同原因。你不需要他们做任何事情,因为他们真的只是对真正发生的事情的抽象。他们的确让事情变得更容易,更快速地编程或理解。
Marc Gravell为'代表什么是代表'提供了一个很好的答案。
安德鲁·特罗尔森定义了一个线程作为
...的过程中的执行路径。 “Pro C#2008和.NET 3.5平台”,Aress。
在您的系统上运行的所有进程都至少有一个线程。我们称之为主线程。您可以根据各种原因创建其他线程,但是说明线程目的的最明显的例子是打印。假设你打开你最喜欢的文字处理应用程序(WPA),输入几行,然后打印这些行。如果您的WPA使用主线程来打印文档,WPA的用户界面将被“冻结”,直到打印完成。这是因为主线程必须打印的线条,才可以处理任何用户界面事件,即按钮点击,鼠标移动等,这是因为如果代码是这样写的:
do
{
ProcessUserInterfaceEvents();
PrintDocument();
} while (true);
显然,这不是用户想要的。用户希望用户界面在文档正在打印时具有响应性。
答案当然是在第二个线程中打印行。通过这种方式,用户界面可以专注于处理用户界面事件,而辅助线程专注于打印线条。
错觉是两项任务同时发生。在单处理器机器上,这不可能是真实的,因为处理器一次只能执行一个线程。但是,线程之间的切换发生得如此之快以至于通常会保持错觉。在多处理器(或多核)机器上,这可能是字面上真实的,因为主线程可以在一个处理器上运行,而辅助线程在另一个处理器上运行。
在.NET中,线程是一件轻而易举的事情。您可以使用System.Threading.ThreadPool类,使用异步委托或创建自己的System.Threading.Thread对象。
如果你是新来的线程,我会抛出两个警告。
首先,如果您选择错误的线程模型,实际上可能会损害应用程序的性能。要小心避免使用太多的线程或试图线索那些应该真正发生的事情。
二(更重要的),要知道,如果你线程之间共享数据,你可能会需要sychronize访问共享数据,例如,使用C#lock关键字。有丰富的关于这一主题在网上提供的信息,所以我就不在这里重复了。要知道,你可以遇到间歇性的,并不-总是重复的错误,如果你不这样做仔细。
- 1. 了解多线程,代表和静态
- 2. C#线程和this.Invalidate()
- 3. C++ /类和线程
- 4. Winform和线程(C#)
- 5. c#线程和等待表格
- 6. Erlang和C/C++线程
- 7. 多线程COMObject和UI线程(C#)
- 8. GCD和代理线程?
- 9. C#:代表和dynamicInvoke
- 10. 线程列表框C#SharpDevelop
- 11. 在C++ 11中,“不代表执行线程”的线程有什么意义?
- 12. C#线程和Sql连接
- 13. 并行线程和用C
- 14. C多线程和协议#
- 15. C#Delegate.BeginInvoke()和线程ID
- 16. C++对象和线程
- 17. C#权限和线程
- 18. C#线程和队列
- 19. C#线程和同步
- 20. 插座和线程用C
- 21. Windows Ressourcemonitor和C++线程
- 22. GC.Collect的和C#多线程
- 23. C#线程和类问题
- 24. C#线程和锁定
- 25. C#中的线程和TcpListener#
- 26. C#等待和多线程
- 27. C#,IAsyncResult和线程池
- 28. C++ boost线程ID和Singleton
- 29. C++线程安全和notify_all()
- 30. C#线程和轮询
功课?这是一个非常基本的问题 – johnc 2009-01-21 23:13:11
即使它可能是基本的,它仍然是一个合法的问题。 – 2009-01-21 23:48:56