一、新建线程的3种方法

  a)异步委托;b)Thread类;c)线程池;

二、异步委托

  1、简单使用,检查委托是否完成其任务 

    a) 通过 BeginInvoke()  的返回值IAsyncResult 中的成员IsCompleted判断

    b)通过 BeginInvoke()  的返回值IAsyncResult 中的成员AsyncWaitHandle.WaitOne(50,false) 函数判断

    c)通过异步回调判断

  2、获取返回值

    通过EndInvoke 函数获取

三、Thread类

  1、简单使用

  2、给线程传递数据(可以将执行的耗时函数放到一个类中,通过类成员变量传递参数)

四、线程池 (ThreadPool 类来管理线程)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace ThreadExam
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public delegate int AsyncDelegate(int data, int ms); static int timeConsumingWork(int data, int ms)
{
return ;
}
static void workForThread(object data)
{
Debug.WriteLine(data);
}
static void resultCompleted(IAsyncResult ar)
{
int result = (ar.AsyncState as AsyncDelegate).EndInvoke(ar);
Debug.WriteLine(result);
}
private void async_Click(object sender, RoutedEventArgs e)
{
Button asyBtn = sender as Button;
switch (asyBtn.Name)
{
case "async1":
AsyncDelegate asyDeleg = timeConsumingWork;
IAsyncResult ar = asyDeleg.BeginInvoke(, , null, null);
while (!ar.IsCompleted) //一直判断状态
{
Console.Write(".");
Thread.Sleep();
}
int result = asyDeleg.EndInvoke(ar);
Debug.WriteLine(result);
break;
case "async2":
AsyncDelegate asyDeleg2 = timeConsumingWork;
IAsyncResult ar2 = asyDeleg2.BeginInvoke(, , null, null);
while (true)
{
Console.Write(".");
if (ar2.AsyncWaitHandle.WaitOne(, false)) //等待50毫秒后看状态
{
break;
}
}
int result2 = asyDeleg2.EndInvoke(ar2);
Debug.WriteLine(result2);
break;
case "async3":
AsyncDelegate asyDeleg3 = timeConsumingWork;
asyDeleg3.BeginInvoke(, , resultCompleted, asyDeleg3);
break;
case "thread1":
new Thread(workForThread).Start();
break;
case "pool1":
for (int i = ; i < ;i++ )
ThreadPool.QueueUserWorkItem(workForThread, );
break;
}
}
}
}

链接:http://pan.baidu.com/s/1boXqVvx 密码:hqc3

参考:http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html

  

最新文章

  1. 安装包制作工具 SetupFactory使用1 详解
  2. September 17th 2016 Week 38th Saturday
  3. 数据库基础知识(1)--数据库php连接
  4. iOS网络-06-监听Iphone的网络状态
  5. AC日记——传话 codevs 1506 (tarjan求环)
  6. Visual Studio Online Integrations-Sync and migration
  7. oracle用户管理实例
  8. WinForm中TextBox 中判断扫描枪输入与键盘输入
  9. sql备份(.bak文件备份)
  10. 用java来实现验证码功能。
  11. C语言 实现base64
  12. Web攻击技术
  13. Linux系统下的网络配置
  14. 01 jmeter性能测试系列_Jmeter的体系结构
  15. 标准I/O流
  16. java线程池ThreadPoolExecutor类使用详解
  17. 【Java】对ArrayList排序
  18. 《纵向切入ASP.NET 3.5控件和组件开发技术》笔记:高效率事件集合对象
  19. 完整的JavaScript版的信用卡校验代码
  20. dijstra算法,求源点到各个顶点的最短距离

热门文章

  1. Guava API学习之Multimap
  2. DEDE函数
  3. PHP学习系列(1)——字符串处理函数(1)
  4. HTML&amp;CSS基础学习笔记1.25-input标签隐藏元素
  5. 遗传算法matlab实现
  6. PhoneGap and Titanium
  7. DOCKER,需要进入生产实践
  8. SaltStack运行任务卡住了,怎么办?
  9. Codeforces 219D Choosing Capital for Treeland
  10. [转]RegOpenKeyEx函数失败的问题