多线程
文章平均质量分 74
mgtts
这个作者很懒,什么都没留下…
展开
-
线程安全类 跨线程修改窗体UI
private void ThreadSafeInvoke(Control control, MethodInvoker invoker) { if (control.InvokeRequired) { control.Invoke(invoker); } ...原创 2011-04-03 13:54:02 · 90 阅读 · 0 评论 -
线程,同步与锁——Lock你到底锁住了谁
线程在多核时代的优势月来越明显,多线程编程的学习也提上议事日程。但越来越多的人陷入线程的泥潭,最后搞得自己面目全非。越来越多的死锁,越来越多的异常数据,在并发性测试中让一个个线程程序员焦头烂额。“自己在自己的编程环境下怎么都没事,单步调试也不会有任何错误,到了两个人,多个人测试的时候怎么就不行了呢?”线程,同步与锁的问题渐渐的凸现在了每个程序员的面前。 还是让我们一起来学习同步与锁吧。 lock是...原创 2011-04-03 14:59:44 · 129 阅读 · 0 评论 -
多线程下WinForm开发应该注意哪些问题?
昨日,与一同事一起在修一个多线程下使用我们的控件产品的Bug。现将相关的经验发布在这里。 1. 标准WinForm控件不支持多线程访问 这一点,其实是Windows的机制。.NET 中每一个Control其实都是一个Window,使用这些Window,原则上都应该在创建这个Window的线程中。否则,会产生异常。这一点,似乎Windows也没有强制约束。某些操作可能会扔异常,而有些情况下却不会。比...原创 2011-04-03 14:52:03 · 114 阅读 · 0 评论 -
在多线程中如何调用Winform
转自 dengsu888666 每一个从Control类中派生出来的WinForm类(包括Control类)都是依靠底层Windows消息和一个消息泵循环(message pump loop)来执行的。消息循环都必须有一个相对应的线程,因为发送到一个window的消息实际上只会被发送到创建该window的线程中去。其结果是,即使提供了同步(synchronization),你也无法从多线程中调...原创 2011-04-03 14:44:47 · 74 阅读 · 0 评论 -
关于.NET异步调用的初步总结
最近看了看.NET异步调用方面的资料,现择重点总结,若有纰漏敬请指正。 异步调用的实质: 异步调用通过委托将所需调用的方法置于一个新线程上运行,从而能够使一个可能需要较长时间的任务在后台执行而不影响调用方的其他行为。 异步调用的实现: 前面已经讲道,异步调用通过委托实现。委托支持同步和异步调用。在同步调用中,一个委托的实例可记录多个目标方法;在异步调用中,一个委托实例中有且只能包含一个目标方法。异...原创 2011-04-03 14:42:01 · 61 阅读 · 0 评论 -
对 Windows 窗体控件进行线程安全调用
今天在编写一个windows应用程序的时候碰到了一个小问题,程序需求是这样的,创建多个线程调用执行某个方法,Windows Form中有个Progress Bar控件用于显示已经执行完毕的进程数,即当所有的线程都运行完毕后,Progress Bar的进度也到头了。先给出初步的实现方式: private const int MAXTHREAD = 100; //最大线程数 private int...原创 2011-04-03 14:39:41 · 84 阅读 · 0 评论 -
DotNet中异步编程的简单应用
这里说的异步编程并不是AJAX等的Web异步编程,而仅仅是DotNet中多线程的异步编程.这种多线程的异步编程主要用来解决某些受计算操作影响而引起主线程阻塞的问题.让程序(主要是窗体应用程序)看跑得更流畅.在dotnet的CLR以及API方法中有简单易用的方法供我们实现异步编程,并且都有相似的调用方法,诸如BeginXXX,EndXXX,IAsyncResult对象,同时也都涉及到回调,委托等操作...原创 2011-04-03 14:35:04 · 149 阅读 · 0 评论 -
winform程序中如何跨线程修改控件的值
winform程序是单线程的。 /// <summary> /// 应用程序入口 /// </summary> [STAThread] static void Main() { } 而且对某一个控件来说,只有创建该控件的线程才能修改它的值。比如我们在设计器中拖到窗体上的控件,它们由程序的主线程创建,那么如果我们在...原创 2011-04-03 14:30:40 · 534 阅读 · 0 评论 -
多线程执行多任务的DEMO
这个场景应用比较普遍, 比如多个线程下载多个文件,比如3个线程下载10个文件,比如10个线程执行1000条任务队列; Demo代码如下: using System; using System.Threading; public partial class Form1 : Form { private ThreadProxy _threadsProxy = null; E...原创 2011-04-03 14:21:05 · 88 阅读 · 0 评论 -
生产者消费者线程在Queue中实现多线程同步
使用C#进行多线程编程经常会用队列池进行线程同步的方法,实现就用到Queue。Queue是线程安全的(Thread safe),但不是泛型的,对象出列时需要进行拆箱转换。也有人会马上想到Queue<T>,但可惜的是泛型Queue<T>却不是线程安全,我们需要用其它编程方法来实现它。 下面介绍一种方法,它能够使用泛型Queue<T>进行线程同步,但是需要用到 lo...原创 2011-04-03 14:19:15 · 323 阅读 · 0 评论 -
C# 多线程下载
下面是一个完整的多线程下载源码,我在写代码的时候遇到点问题也放在下面,希望大家别犯相同的错误。 问题1、线程偷懒? 在程序中我设置N个线程去下载时,然而有的线程却偷懒去了,当时非常奇怪,花了很多时间在代码上。 这其实是因为服务器不支持多线程下载造成的,大部分专业的下载站都禁止多线程下载,既然是服务器的原因那就没法了,在这里我想提一下在IIS7中启用和禁止多线程的方法。 应用程序池 -》 右击属性“...原创 2011-04-03 14:12:06 · 300 阅读 · 1 评论 -
.NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke
1,错误的代码是: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms...原创 2011-04-03 14:06:01 · 175 阅读 · 0 评论 -
利用委托机制处理.NET中的异常
转自 terrylee.cnblogs.com 概述 在.NET中,可以轻松的通过try-catch块来捕获异常。为了防止在应用程序中出现未处理的异常,可以通过添加一个全局的异常处理函数,如果是多线程的处理,还必须考虑除了主线程之外的工作线程中的异常处理办法,这里用委托机制来实现。 主线程的异常处理 使用Application对象中的ThreadException属性设置一个delegate来...原创 2011-04-03 14:01:30 · 72 阅读 · 0 评论 -
文件读写冲突的解决办法:ReaderWriterLock
项目中碰到了静态页文件读写冲突的问题(如果同时存在读写就报黄页,虽然写入是“瞬间”的,但高并发下依然有可能)。 public class ReaderWriterLockHelper { static ReaderWriterLock rwl = new ReaderWriterLock(); public static void Rea...原创 2011-04-07 14:59:13 · 746 阅读 · 0 评论