Spiga

C# 线程手册 第七章 网络和线程 创建一个客户端

2012-05-26 10:51 by DanielWise, 854 visits, 网摘, 收藏, 编辑
摘要:现在你已经对.NET 中的网络编程有了一个初步的了解,现在我们来实际讨论下本章将要实现的示例程序。这个例子的目的是通过创建一个网络应用程序来让你熟悉线程的使用。这个程序实际上由两个小的Windows 窗体程序组成,一个作为服务端而另外一个作为客户端。我们将使用Visual Studio.NET 来设计实现这些程序。设计目标 我们想创建两个交互程序。第一个是用来从一个数据库表中寻找股票交易数据然后将数据异步地返回给客户端的多线程/多用户股票交易服务程序。第二个是一个通过股票交易号来从服务端查询股票信息的客户端。所有这些都异步执行,客户端用户接口在服务端对请求作出响应时不会卡住。 在.NET F. 阅读全文

C# 线程手册 第七章 网络和线程

2012-05-06 09:59 by DanielWise, 1106 visits, 网摘, 收藏, 编辑
摘要:概述 在本书的之前章节,我们已经深入地了解了C#.NET 中的线程并探讨了多线程编程中的不同概念和技术。现在你已经是一个线程专家啦,我们将要使用C#实现一个简单的多线程客户端-服务端程序并在其中使用一些我们到目前为止讨论过的概念。 多一些应用来说,高效地使用线程和异步编程是不可或缺的,比如网络通信,高效用户接口以及磁盘输入/输出等等。在所有这些情况下,如果使用单线程的话程序可能会卡死或者在等待一个操作完成的过程中崩溃。对那些网速比较慢的用户来说,一个网络程序的延迟时间是最重要的衡量标准。在本章的示例程序中,我们将要使用System.Net 命名空间并简要地了解下.NET 的网络能力,尤其是对具 阅读全文

C# 线程手册 第六章 线程调试与跟踪 DataImport 例子

2012-04-28 14:01 by DanielWise, 1332 visits, 网摘, 收藏, 编辑
摘要:现在我们要集中精力实现一个实战实例来描述到目前为止我们已经看过的内容。这里要实现的DataImport 例子是那种等待文件到达指定目录然后将其导入到一个SQL Server 数据库中的典型程序。下面我们列出了这个例子中将要使用的类: FileSystemWatcher: 这个类允许开发人员监控指定目录并能够在发生改变时(比如创建一个新文件或者删除一个文件)触发事件。这个类位于System.IO 命名空间中。 TextWriterTraceListener: 实现我们自己的跟踪功能。 Thread: 已经看过很多遍了,允许我们启动一个新线程来把数据导入到数据库中。 很多SqlClient 命名. 阅读全文

C# 线程手册 第六章 线程调试与跟踪 跟踪开关

2012-04-25 21:41 by DanielWise, 1174 visits, 网摘, 收藏, 编辑
摘要:当你的程序接近部署阶段时,你可能想从代码中去掉所有的跟踪和调试消息。然而,你不得不从代码中一条一条地寻找调试指令并将其去掉。对于这种情况你可以在程序编译期间使用编译标志处理。从Visual Studio.NET IDE, 你可以在解决方案管理窗口右键工程名->从菜单页选择属性。如下图对话框显示: 你只需要简单地将定义调试常量和跟踪常量选项勾掉,重新编译解决方案,所有的跟踪和调试代码都将会被从应用程序中被去掉。 为了去掉跟踪功能,你可以使用csc.exe 命令行编译器。在编译时使用/d:TRACE=FALSE /d:DEBUG=FALSE 开关。 对跟踪代码添加开关功能... 阅读全文

C# 线程手册 第六章 线程调试与跟踪 使用不同的监听器程序

2012-04-24 22:26 by DanielWise, 953 visits, 网摘, 收藏, 编辑
摘要:在这部分,我们将了解如何改变默认的监听器程序。Trace 类和Debug类暴露了监听器集合(一系列监听程序集合)。如果不添加任何新的监听类,DefaultTraceListener 将指向由Visual Studio.NET 提供的调试输出窗口。然而,.NET Framework 提供另外可以用作监听程序的两个类: 如果你需要跟踪一个不在Visual Studio 中执行的多线程应用程序的行为,那么你需要将默认监听器改成以上列表中的某一个。通常情况下,调试输出窗口仅在调试过程中可用。使用这两个类,你可以选择将跟踪消息写入Windows 事件日志中或者一个文本文件中。一般来说,如果你知道你的程. 阅读全文

C# 线程手册 第六章 线程调试与跟踪 代码跟踪

2012-04-23 21:55 by DanielWise, 1086 visits, 网摘, 收藏, 编辑
摘要:我们下一个将要分析的代码检测技术是跟踪。在一个多线程应用程序中,这个技术非常重要。当已经启动了多个任务时,你可以跟踪一个线程的行为和相互之间的各个线程之间的影响。我们稍后将看到在这种情况下使用调试器是不现实的。.NET Framework 提供了很多有用的类来帮助开发人员轻松地实现跟踪功能。让我们看一下.NET Framework 提供的System.Diagnostics 命名空间中的跟踪类。 1. Trace: 这个类有很多向一个监听器写消息的静态方法。默认情况下,VS.NET 中的调试输出窗口将被用来作为监听程序,由于使用了监听器集合,所以你可以添加不同的监听器,比如文本监听器或者Wi. 阅读全文

C# 线程手册 第六章 线程调试与跟踪

2012-04-21 16:41 by DanielWise, 1355 visits, 网摘, 收藏, 编辑
摘要:调试与跟踪是两个经常使用到的技术,这两种技术对程序员是非常必要的。前者允许开发人员分析一个程序的变量值以及代码,一步一步跟踪代码流程。后者允许我们跟踪我们应用程序的行为,在一个监听器(一个日志文件,Windows 事件日志等)中显示信息。它们是创建鲁棒性应用程序的基础,因为它们给开发人员提供了一个简单的方式去跟踪并理解我们的应用程序是如何工作的。这两种技术最大的不同是跟踪可以在一个程序运行过程中完成,而调试用于设计阶段以及我们的最终版程序发布之前。 桌面应用程序开发人员通常有出色的调试技术支持,能够使用断点去检查变量内容。.NET 在这方面也不例外,但是在一个多线程应用程序中使用断点来观察一. 阅读全文

C# 线程手册 第五章 多线程应用程序 .NET 中的扩展性

2012-04-19 22:27 by DanielWise, 1645 visits, 网摘, 收藏, 编辑
摘要:如果你有一个多处理器系统,那么你将有机会体验到线程真正的价值。Windows 操作系统负责向处理器分配线程,正如你在本书中看到的那样,启动一个进程会自动运行一个线程。.NET Framework 不提供细粒度的处理器分配控制,而是允许操作系统控制调度,这是由于操作系统比CLR 更加了解处理器的负载。CLR 负责提供一些诸如整个进程运行在哪个处理器上的控制。然而,一个进程中的所有线程都会运行在一个处理器上,控制进程中的线程运行在哪个处理器上的内容不会在本书中介绍。 如果你只有一个主线程,那么在这个线程中的每个任务都会运行在同一个处理器上。然而,如果系统中又新建了一个线程,那么操作系统负责调度这. 阅读全文

C# 线程手册 第五章 多线程应用程序 一个多线程微软消息队列(MSMQ)监听器

2012-04-15 15:16 by DanielWise, 1422 visits, 网摘, 收藏, 编辑
摘要:在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发。MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信。 在一个典型的场景中,我们要向维护一个队列的MSMQ 服务器发送消息,MSMQ 发送方与MSMQ 服务器(特定队列)之间创建一个连接并向那个队列发送消息。一个MSMQ 接收器接收由MSMQ发送方发送的消息。MSMQ 接收方需要监听一个特定的队列以接收发送到这个队列上的消息。MSMQ服务器在MSMQ发送方和接收方之间起到了一个中转的作用,但MSMQ发送方不知道还有一个MSMQ接收方,反之亦然。 在我们的程序中,我们将开发一个MSMQ发送程序. 阅读全文

C# 线程手册 第五章 扩展多线程应用程序 在C#中使用线程池

2012-04-09 22:08 by DanielWise, 1116 visits, 网摘, 收藏, 编辑
摘要:本章的之前部分内容主要介绍如何在.NET Framework 中使用线程池的概念。现在我们要介绍如何使用C# 实现创建并使用线程池的.NET 应用程序。如之前描述的那样,System.Threading 命名空间中包含的ThreadPool 类可以被用于在.NET 应用程序中创建一个线程池。 在我们真正编码之前,我们必须对ThreadPool 类中的两个重要规则非常清楚。分别是: 1. 每个应用程序域中只能有一个ThreadPool 对象 2. 我们第一次调用ThreadPool.QueueUserWorkItem() 方法时会创建一个ThreadPool 对象,通过一个定时器或者注册的等待. 阅读全文