如何:使用后台辅助线程
2012-08-24 22:09
288 查看
http://msdn.microsoft.com/zh-cn/library/cc221403(v=vs.95).aspx
1(共 1)对本文的评价是有帮助
- 评价此主题
Silverlight BackgroundWorker 类提供通过后台线程运行非常耗时的操作的便利方法。BackgroundWorker
类允许您查看操作的状态并且可以取消操作。
使用 BackgroundWorker 类时,可以在 Silverlight 用户界面中指示操作进度、完成和取消情况。例如,可以查看后台操作是已完成还是已取消并为用户显示消息。
过程
C#
VB
复制
指定是否希望后台操作允许执行取消操作和报告进度。
C#
VB
复制
为后台辅助线程的 DoWork 事件创建事件处理程序。
DoWork 事件处理程序位于在后台线程运行非常耗时的操作的位置。应在
DoWorkEventArgs 对象的
Argument 属性中传递要传递给后台操作的任何值,而该属性将传递给事件处理程序。
若要将进度报告回调用进程,请调用 ReportProgress 方法并将介于 0 到 100 之间的完成百分比传递给它。调用
ReportProgress 方法将引发
ProgressChanged 事件,您将单独处理该事件。
若要确定是否有取消后台操作的挂起的请求,请查看 BackgroundWorker 对象的
CancellationPending 属性。如果该属性为
true,则表示调用了 CancelAsync 方法。将
BackgroundWorker 对象的
Cancel 属性设置为
true 并停止操作。
若要将数据传递回调用进程,请设置要传递给事件处理程序的 DoWorkEventArgs 对象的
Result 属性。在操作结束引发
RunWorkerCompleted 事件时,可以读取此值。
C#
VB
复制
为后台辅助线程的 ProgressChanged 事件创建事件处理程序。
在 ProgressChanged 事件处理程序中,添加指示进度的代码(如更新用户界面)。
若要确定操作的完成百分比,请查看传递给事件处理程序的 ProgressChangedEventArgs 对象的
ProgressPercentage 属性。
C#
VB
复制
为 RunWorkerCompleted 事件创建一个事件处理程序。
后台辅助线程完成时,将引发 RunWorkerCompleted 事件。根据后台操作是成功完成、遇到错误还是已取消,相应更新用户界面。
若要确定是否出错,请查看传递给事件处理程序的 RunWorkerCompletedEventArgs 对象的
Error 属性。如果出错,此属性将包含异常信息。
如果后台操作允许取消且您想查看操作是否被取消,请查看传递给事件处理程序的 RunWorkerCompletedEventArgs 对象的
Cancelled 属性。如果该属性为
true,则表示调用了 CancelAsync 方法。
C#
VB
复制
为 BackgroundWorker 实例的事件添加事件处理程序。
下面的示例演示如何为 DoWork、ProgressChanged
和 RunWorkerCompleted 事件添加事件处理程序。
C#
VB
复制
通过调用 RunWorkerAsync 方法来开始运行后台操作。
C#
VB
复制
通过调用 CancelAsync 方法来取消后台操作。
C#
VB
复制
示例
下面的示例演示如何使用 BackgroundWorker 类。在此示例中,后台操作运行
Sleep 方法并将进度报告给用户界面。后台辅助线程已配置为允许取消。
C#
VB
复制
XAML
复制
XAML
复制
请参见
本文是否对您有所帮助?
是否
不准确
深度不够
需要更多代码示例
翻译需要改进
请告诉我们更多意见...
(1500 个剩余字符)
社区内容添加
常见问题
© 2012 Microsoft. 版权所有。
保留所有权利 |
商标 |
隐私权声明|
个人信息中心 |
法律信息 |
MSDN Flash 中心 |
联系我们|
网站反馈 网站反馈
网站反馈
x
请与我们分享您的经历…
页面加载速度够快吗?
是 否
您喜欢网页的设计吗?
是 否
请告诉我们更多意见
Enter description here.
<div><img alt="DCSIMG" id="Img1" width="1" height="1" src="http://m.webtrends.com/dcsmgru7m99k7mqmgrhudo0k8_8c6m/njs.gif?dcsuri=/nojavascript&WT.js=No" /></div>
<a href="http://www.omniture.com" title="Web Analytics"> <img src="//msstonojsmsdn.112.2o7.net/b/ss/msstonojsmsdn/1/H.20.2--NS/0" height="1" width="1" border="0" alt="" /></a>
loading...
如何:使用后台辅助线程
Silverlight1(共 1)对本文的评价是有帮助
- 评价此主题
Silverlight BackgroundWorker 类提供通过后台线程运行非常耗时的操作的便利方法。BackgroundWorker
类允许您查看操作的状态并且可以取消操作。
使用 BackgroundWorker 类时,可以在 Silverlight 用户界面中指示操作进度、完成和取消情况。例如,可以查看后台操作是已完成还是已取消并为用户显示消息。
过程
使用 BackgroundWorker 类
在类级别创建 BackgroundWorker 类的实例。C#
VB
复制
BackgroundWorker bw = new BackgroundWorker();
指定是否希望后台操作允许执行取消操作和报告进度。
C#
VB
复制
bw.WorkerSupportsCancellation = true; bw.WorkerReportsProgress = true;
为后台辅助线程的 DoWork 事件创建事件处理程序。
DoWork 事件处理程序位于在后台线程运行非常耗时的操作的位置。应在
DoWorkEventArgs 对象的
Argument 属性中传递要传递给后台操作的任何值,而该属性将传递给事件处理程序。
若要将进度报告回调用进程,请调用 ReportProgress 方法并将介于 0 到 100 之间的完成百分比传递给它。调用
ReportProgress 方法将引发
ProgressChanged 事件,您将单独处理该事件。
说明: |
---|
如果后台辅助线程的 WorkerReportsProgress 属性未设置为 true 且调用了 ReportProgress 方法,将引发异常。 |
CancellationPending 属性。如果该属性为
true,则表示调用了 CancelAsync 方法。将
BackgroundWorker 对象的
Cancel 属性设置为
true 并停止操作。
若要将数据传递回调用进程,请设置要传递给事件处理程序的 DoWorkEventArgs 对象的
Result 属性。在操作结束引发
RunWorkerCompleted 事件时,可以读取此值。
C#
VB
复制
private void bw_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int i = 1; (i <= 10); i++) { if ((worker.CancellationPending == true)) { e.Cancel = true; break; } else { // Perform a time consuming operation and report progress. System.Threading.Thread.Sleep(500); worker.ReportProgress((i * 10)); } } }
为后台辅助线程的 ProgressChanged 事件创建事件处理程序。
在 ProgressChanged 事件处理程序中,添加指示进度的代码(如更新用户界面)。
若要确定操作的完成百分比,请查看传递给事件处理程序的 ProgressChangedEventArgs 对象的
ProgressPercentage 属性。
C#
VB
复制
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%"); }
为 RunWorkerCompleted 事件创建一个事件处理程序。
后台辅助线程完成时,将引发 RunWorkerCompleted 事件。根据后台操作是成功完成、遇到错误还是已取消,相应更新用户界面。
若要确定是否出错,请查看传递给事件处理程序的 RunWorkerCompletedEventArgs 对象的
Error 属性。如果出错,此属性将包含异常信息。
如果后台操作允许取消且您想查看操作是否被取消,请查看传递给事件处理程序的 RunWorkerCompletedEventArgs 对象的
Cancelled 属性。如果该属性为
true,则表示调用了 CancelAsync 方法。
C#
VB
复制
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if ((e.Cancelled == true)) { this.tbProgress.Text = "Canceled!"; } else if (!(e.Error == null)) { this.tbProgress.Text = ("Error: " + e.Error.Message); } else { this.tbProgress.Text = "Done!"; } }
为 BackgroundWorker 实例的事件添加事件处理程序。
下面的示例演示如何为 DoWork、ProgressChanged
和 RunWorkerCompleted 事件添加事件处理程序。
C#
VB
复制
bw.DoWork += new DoWorkEventHandler(bw_DoWork); bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
通过调用 RunWorkerAsync 方法来开始运行后台操作。
C#
VB
复制
private void buttonStart_Click(object sender, RoutedEventArgs e) { if (bw.IsBusy != true) { bw.RunWorkerAsync(); } }
通过调用 CancelAsync 方法来取消后台操作。
C#
VB
复制
private void buttonCancel_Click(object sender, RoutedEventArgs e) { if (bw.WorkerSupportsCancellation == true) { bw.CancelAsync(); } }
示例
下面的示例演示如何使用 BackgroundWorker 类。在此示例中,后台操作运行
Sleep 方法并将进度报告给用户界面。后台辅助线程已配置为允许取消。
C#
VB
复制
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
namespace SL_BackgroundWorker_CS
{
public partial class Page : UserControl
{
private BackgroundWorker bw = new BackgroundWorker();
public Page()
{
InitializeComponent();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}
}
private void buttonCancel_Click(object sender, RoutedEventArgs e)
{
if (bw.WorkerSupportsCancellation == true)
{
bw.CancelAsync();
}
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 10));
}
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
this.tbProgress.Text = "Canceled!";
}
else if (!(e.Error == null))
{
this.tbProgress.Text = ("Error: " + e.Error.Message);
}
else
{
this.tbProgress.Text = "Done!";
}
}
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");
}
}
}
XAML
复制
<UserControl x:Class="SL_BackgroundWorker_CS.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10" > <Button x:Name="buttonStart" Content="Start" Click="buttonStart_Click" Width="80" Height="30"/> <Button x:Name="buttonCancel" Content="Cancel" Click="buttonCancel_Click" Width="80" Height="30"/> </StackPanel> <StackPanel Margin="10,50,0,0" Orientation="Horizontal"> <TextBlock Text="Progress: "/> <TextBlock x:Name="tbProgress"/> </StackPanel> </Grid> </UserControl>
XAML
复制
<UserControl x:Class="SL_BackgroundWorker_VB.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10" > <Button x:Name="buttonStart" Content="Start" Click="buttonStart_Click" Width="80" Height="30"/> <Button x:Name="buttonCancel" Content="Cancel" Click="buttonCancel_Click" Width="80" Height="30"/> </StackPanel> <StackPanel Margin="10,50,0,0" Orientation="Horizontal"> <TextBlock Text="Progress: " /> <TextBlock x:Name="tbProgress" /> </StackPanel> </Grid> </UserControl>
请参见
参考
BackgroundWorker其他资源
托管线程处理本文是否对您有所帮助?
是否
不准确
深度不够
需要更多代码示例
翻译需要改进
请告诉我们更多意见...
(1500 个剩余字符)
社区内容添加
常见问题
© 2012 Microsoft. 版权所有。
保留所有权利 |
商标 |
隐私权声明|
个人信息中心 |
法律信息 |
MSDN Flash 中心 |
联系我们|
网站反馈 网站反馈
网站反馈
x
请与我们分享您的经历…
页面加载速度够快吗?
是 否
您喜欢网页的设计吗?
是 否
请告诉我们更多意见
Enter description here.
<div><img alt="DCSIMG" id="Img1" width="1" height="1" src="http://m.webtrends.com/dcsmgru7m99k7mqmgrhudo0k8_8c6m/njs.gif?dcsuri=/nojavascript&WT.js=No" /></div>
<a href="http://www.omniture.com" title="Web Analytics"> <img src="//msstonojsmsdn.112.2o7.net/b/ss/msstonojsmsdn/1/H.20.2--NS/0" height="1" width="1" border="0" alt="" /></a>
loading...
相关文章推荐
- C#如何使用BackgroundWork后台辅助线程控件
- 如何:使用后台辅助线程
- Windows 窗体控件中的多线程处理之:如何使用后台线程搜索文件
- Windows 窗体编程 如何:使用后台线程搜索文件 (线程经典例子)
- 图文讲解如何使用Gmail绑定域名开通企业邮箱(使用时代互联的域名管理后台)
- 【Android】揭秘如何利用Service与线程制造安卓后台通知栏推送
- 在Android中使用Handler和Thread线程执行后台操作
- Linux环境下如何查找哪个线程使用CPU最长
- 《C#编程之道》 之 如何将前台线程改为后台线程
- 如何使用WorkManager执行后台任务(下)
- 如何使用laravel搭建后台登录系统
- 智游推送教你如何使用统计图表辅助运营
- 如何取消后台线程的执行
- 辅助线程与后台线程
- VS2015使用小技巧 如何在写函数的时候,让VS显示函数的辅助说明
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- 在WinFrom应用中,如果使用后台线程来操作界面应调用Control.Invoke()方法
- ASPNET中实现在线用户检测(使用后台守护线程)
- 如何使用json在前后台进行数据传输
- 做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 spring hibernate 如何 ?