c#基础: 线程的初级用法总结
2016-03-25 17:28
441 查看
启动一个线程的两种方法:
a、使用无参的方法
Thread thread1 = new Thread(new ThreadStart("调用的方法名"));
thread1.Start();
// 调用此方法的线程上会抛出ThreadAbortException异常
thread1.About();
b、使用有参的方法
Thread thread2 = new Thread(new ParameterizedThreadStart("调用的方法名"));
// IsBackground --> 获取或设置一个值,该值指示某个线程是否为后台线程
thread2.IsBackground = true;
thread2.Start();
异步线程的使用 :
普通线程如果假死,会导致程序阻塞,可以用异步线程解决这个问题,CLR提供了很多方法,如FileStream的BeginRead和EndRead方法,HttpWebRequest的BeginGetResponse方法和EndGetResponse方法,
如下为HttpWebRequest的使用示例:
private void TestHttpRequest()
{
HttpWebRequest req = WebRequest.Create("http://www.baidu.com") as HttpWebRequest;
req.BeginGetResponse(new AsyncCallback(ResponseCallback), req);
}
private void ResponseCallback(IAsyncResult ia)
{
HttpWebRequest req = ia.AsyncState as HttpWebRequest;
HttpWebResponse res = req.EndGetResponse(ia) as HttpWebResponse;
Console.WriteLine(res.ContentLength);
}
// 调用了Begin后 应该在适当的时候调用End释放资源,否则会造成资源无法释放
a、使用无参的方法
Thread thread1 = new Thread(new ThreadStart("调用的方法名"));
thread1.Start();
// 调用此方法的线程上会抛出ThreadAbortException异常
thread1.About();
b、使用有参的方法
Thread thread2 = new Thread(new ParameterizedThreadStart("调用的方法名"));
// IsBackground --> 获取或设置一个值,该值指示某个线程是否为后台线程
thread2.IsBackground = true;
thread2.Start();
异步线程的使用 :
普通线程如果假死,会导致程序阻塞,可以用异步线程解决这个问题,CLR提供了很多方法,如FileStream的BeginRead和EndRead方法,HttpWebRequest的BeginGetResponse方法和EndGetResponse方法,
如下为HttpWebRequest的使用示例:
private void TestHttpRequest()
{
HttpWebRequest req = WebRequest.Create("http://www.baidu.com") as HttpWebRequest;
req.BeginGetResponse(new AsyncCallback(ResponseCallback), req);
}
private void ResponseCallback(IAsyncResult ia)
{
HttpWebRequest req = ia.AsyncState as HttpWebRequest;
HttpWebResponse res = req.EndGetResponse(ia) as HttpWebResponse;
Console.WriteLine(res.ContentLength);
}
// 调用了Begin后 应该在适当的时候调用End释放资源,否则会造成资源无法释放
相关文章推荐
- C#基础:集合
- 输入某人出生日期,计算年龄和距60岁的天数
- C#里partial关键字的作用(转摘)
- 2016年c#实验3.3:录入学号和姓名
- C#数组冒泡排序
- C# 文件压缩与解压(ZIP)基于 .Net Framework
- C#Chart 格控件的一些使用心得
- .NET/C# RabbitMQ
- C#——Random类猜数字
- C#上机实验(二)
- C#实验2.4
- C# 中const和readonly的区别
- 2016年c#:猜数字
- C#设备处理类操作
- 猜数字
- C#字符串操作
- C#语音录制
- (c#vs2008)@page命令属性详解
- C#中的线程二(BeginInvoke和Invoke)
- C#中的线程一(委托中的异步)