关于多线程和异步

本文介绍了在计算密集型任务中使用多线程技术,以及在IO密集型任务中运用异步机制的方法。通过具体的C#代码示例,展示了如何实现这两种技术,包括创建新的线程来执行特定任务以及通过异步方式获取网页内容。

 

计算密集型工作,采用多线程。

IO密集型工作,采用异步机制。

 

/// <summary>
/// 多线程 新开一个线程执行程序
/// </summary>
private void btnMutilthread_Click(object sender, EventArgs e)
{
var thread = new Thread(DoSomething);
thread.Start();
}

public void DoSomething()
{
var request = HttpWebRequest.Create("http://www.cnblogs.com/jx270");
var response = request.GetResponse();
var stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
var content = reader.ReadToEnd();
//textBox1.Text = content;
SetText(content);
}
}

/// <summary>
/// 异步执行程序 减少占有CPU (DMA中断方式)
/// </summary>
private void btnAsyc_Click(object sender, EventArgs e)
{
var request = HttpWebRequest.Create("http://www.cnblogs.com/jx270");
request.BeginGetResponse(this.AsyncCallbackImp, request);
}

public void AsyncCallbackImp(IAsyncResult ar)
{
WebRequest request = ar.AsyncState as WebRequest;
var response = request.EndGetResponse(ar);
var stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
var content = reader.ReadToEnd();
//textBox1.Text = content;
SetText(content);
}
}

void SetText(string argText)
{
if (textBox1.InvokeRequired)
{
var callBack = new DelegateMethod(SetText);
textBox1.Invoke(callBack, new[] { argText });
}
else
{
textBox1.Text = argText;
}
}

delegate void DelegateMethod(string argText);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值