摘要: 如果我们要从线程池中取消某个线程的操作,应该如何实现呢?本示例使用CancellationTokenSource和CancellationToken两个类来实现在取消线程池中的操作。阅读全文
posted @ 2017-11-13 09:45 DotNet菜园 阅读(138) 评论(1) 编辑
摘要: .NET中的线程池是受CLR管理的,TheadTool类有一个QueueUserWorkItem静态方法,这个静态方法接受一个委托,代表用户自定义的一个异步操作,在这个方法被调用之后,委托会进入到内部队列中,如果池中没有线程,则创建一个工作线程,把第一个委托放入工作线程。如果继续放入委托,则池创建新的工作线程,直到工作线程数量达到上限。这时再放入委托,则不会创建新的工作线程,而是在队列中等待,直到有空闲的工作线程。阅读全文
posted @ 2017-11-08 12:05 DotNet菜园 阅读(646) 评论(2) 编辑
摘要: Barrier类用于组织多个线程及时在某个时刻会面,其提供一个回调函数,每次线程调用了SignalAndWait方法后该回调函数就会被执行。阅读全文
posted @ 2017-11-03 15:29 DotNet菜园 阅读(389) 评论(0) 编辑
摘要: 程序中,我们定义了两个AutoResetEvent实例。其中一个是从子线程往主线程发信号 ,另一个是主线程往子线程发信号。我们在构造AutoResetEvent时,传入了false,定义了这两个实例的初始状态unsignaled。这个状态下,任何线程调用这两个实例的WaitOne方法将会被阻塞,直到我们调用了Set方法。如果我们在构造的时候传入了true,则这两个实例的初始状态是singnaled,则线程调用WaitOne则会被立即处理。阅读全文
posted @ 2017-11-01 15:08 DotNet菜园 阅读(445) 评论(0) 编辑
摘要: 多线程使用共享变量,就会涉及到一个线程同步的问题。那如何解决呢? 1) 重构程序,移除多线程的共享变量,让一个线程只访问一个自有变量 2) 使用原子操作,一个操作只占用一个量子时间,一次完成,只有当当前操作完成之后,其他线程才能进行操作。这样可以避免使用独占锁,避免死锁。 3) 通过NET构架提供的Mutex、AutoRestEvent、CountDownEven、SpinWait等类,来进行线程间的同步。阅读全文
posted @ 2017-10-27 16:21 DotNet菜园 阅读(747) 评论(2) 编辑
摘要: 多线程编程学习笔记-基础阅读全文
posted @ 2017-10-25 14:15 DotNet菜园 阅读(306) 评论(1) 编辑
摘要: 多线程编程学习笔记阅读全文
posted @ 2017-10-20 13:35 DotNet菜园 阅读(420) 评论(1) 编辑
摘要: 多线程编程学习笔记阅读全文
posted @ 2017-10-19 16:04 DotNet菜园 阅读(544) 评论(1) 编辑
摘要: 最近在学习百度的开源上传组件WebUploader,上一篇文章,学习了批量文件上传,今天学习一下批量图片上传,实际上与文件上传很类似,只是添加了图片显示功能,这个功能WebUploader组件中已经提供了。阅读全文
posted @ 2017-09-07 16:41 DotNet菜园 阅读(356) 评论(0) 编辑
摘要: 最近在学习百度的开源上传组件WebUploader,写了一些示例以记录。WebUploader的缺点是没有一个比较好的现成的界面,这个界面需要自己去实现。自由度高了一些。使用WebUploader为核心进行文件的批量上传的解决方案。阅读全文
posted @ 2017-08-31 15:29 DotNet菜园 阅读(1097) 评论(5) 编辑
摘要: 在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法。分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页。在今天这篇文章中,我们学习如果在MVC页面中使用PagedList.Mvc包来实现分页功能。阅读全文
posted @ 2017-03-15 15:56 DotNet菜园 阅读(1625) 评论(3) 编辑
摘要: 下面我们通过一个简单的例子学习如何对书籍信息按照价格进行排序。阅读全文
posted @ 2017-02-28 15:36 DotNet菜园 阅读(1256) 评论(0) 编辑
摘要: 本文介绍应用程序中添加书籍的保存功能,涉及两个功能“新增”与“修改”。异常处理的小结。阅读全文
posted @ 2016-12-01 17:13 DotNet菜园 阅读(1635) 评论(0) 编辑
摘要: 在上一篇文章中我们创建了WCF服务端应用程序,在这一篇文章中我们来学习如何创建WCF的服务端寄宿程序与客户端调用程序。阅读全文
posted @ 2016-11-17 10:12 DotNet菜园 阅读(856) 评论(0) 编辑
摘要: 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码。创建项目BookMgr.Service的WCF服务代码。阅读全文
posted @ 2016-11-09 13:42 DotNet菜园 阅读(889) 评论(0) 编辑
摘要: 在项目BookMgr.Model创建实体类数据阅读全文
posted @ 2016-11-02 16:01 DotNet菜园 阅读(864) 评论(0) 编辑
摘要: 通过前面二十几个章节的学习,我们知道了什么是WCF;WCF中的A、B、C;WCF的传输模式;WCF的寄宿方式;WCF的异常处理。本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书籍管理系统(BookMgr)。 这个示例就是一个非常简单的书籍管理系统,功能有:查询、修改、新增、删除(不包括安全、优化等相关问题)、异常处理。WCF的增删改查和WinForm相差无几。WCF只是把具体“实现”写在“服务端”,而“调用”放在了“客户端”。阅读全文
posted @ 2016-10-27 10:57 DotNet菜园 阅读(1153) 评论(0) 编辑
摘要: 对于路由的实现,本质上就是实现逻辑地址和物理地址的分离。通过前面的示例介绍,我们了解,如何在客户端实现TcpTracer捕获客户端与服务端的通信信息。在这一章节中我们学习如能通过设置ListenUri实现基于服务端的TcpTracer的消息路由。 服务端的物理地址和逻辑地址的分离通过ListenUri实现,ListenUri指定了服务的物理地址,大家可能觉得奇怪,我们设置服务地址的时候一般都是设 置Address(ABC的一部分),但是Address指定的是逻辑地址,而ListenUri指定的是物理地址,如果指定了这个属性的值,那么就指定了服务的物理地址。阅读全文
posted @ 2016-09-29 15:41 DotNet菜园 阅读(952) 评论(1) 编辑
摘要: 首先来讲讲TcpTrace实现的基本原理。说简单点,TcpTracer就是一个监听/转发器(Listening/Forwarding),就是一个路由器。当启动的时候,我们需要设置两个端口:监听端口(Listening Port)和目的主机(Destination Server)与目的端口(Destination Port),然后TcpTracer就会在本机的监听端口进行网络监听。一旦有针对该监听端口的请求抵达,他会截获整个请求的消息,并将整个消息显示到消息面板上。随后,TcpTracer会将该消息原封不动地转发给目的主机与目的端口。在另一方面,从目的主机与目的端口发送给原端口的消息,也同样被TcpTracer截获、显示和转发。 说白了就是把要发的消息先给我们查看和备份,再转发出去。阅读全文
posted @ 2016-09-22 17:13 DotNet菜园 阅读(964) 评论(0) 编辑
摘要: 为了强调REST的通用性,客户端不用WCF的形式调用服务,而是采用HttpWebResponse通过编程方式直接访问,消息格式我们选XML。阅读全文
posted @ 2016-09-15 13:53 DotNet菜园 阅读(1249) 评论(0) 编辑