silverlight
发布时间:2022-05-04 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在silverlight 2 (beta1) 中使用BackgroundWorker,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在silverlight 2(Beta1) 中使用
BACkgroundWorker非常简单,下面是一个DEMO,用于执行从1 累加到100.在累加过程中,SUM值会不断更新,当累加到100后,
BACkgroundWorker会在成功执行 结束后调用一个 WCF服务来输出最终的运行信息,就像我们在下面这张图中看到的一样.
首先我们要创建一个WCF服务应用,用来返回指定
在silverlight 2(Beta1) 中使用BACkgroundWorker非常简单,下面是一个DEMO,用于执行从1
累加到100.在累加过程中,SUM值会不断更新,当累加到100后,BACkgroundWorker会在成功执行
结束后调用一个 WCF服务来输出最终的运行信息,就像我们在下面这张图中看到的一样.
首先我们要创建一个WCF服务应用,用来返回指定的累加数据信息.相应名称为:
CrossSiteCall_Server
因为要用到跨站调用,所以我们还要建立一个clientaccesspolicy.xml文件,并放在该项目的根目
录下,其内容如下:
<?
xml version="1.0" encoding="utf-8"
?>
<
access-policy
>
<
cross-domain-access
>
<
policy
>
<
allow-from
>
<
domain
uri
="*"
/>
</
allow-from
>
<
grant-to
>
<
resource
path
="/"
include-subpaths
="true"
/>
</
grant-to
>
</
policy
>
</
cross-domain-access
>
</
access-policy
>
下面是相应的接口(Contract)及功能代码:
[serviceContract]
public
interface
Iservice
{
[OperationContract]
String
Showmessage(
int
x,
int
y,
int
sum);
}
public
class
service : Iservice
{
public
String
Showmessage(
int
x,
int
y ,
int
sum)
{
return
"
从
"
+
x
+
"
累加到
"
+
y
+
"
等于:
"
+
sum;
}
}
然后将web.config文件中的binding="wshttpBinding" 改写成basichttpBinding. 编译运行这个
项目,并将最终的服务引用地址复制下来.
本DEMO中的链接地址:http://localhost:7501/Service.svc
然后我们再去创建一个Silverlight Application 项目,并将其命名为:BACkgroundWorker
并在当前的silverlight项目中添加上面SVC地址的服务引用,并将其命名为service.
下面就是相应的xaml代码,将它放入Page.xaml中:
<
Grid
x:Name
="LayoutRoot"
BACkground
="White"
>
<
StackPanel
HorizontalAlignment
="Center"
VerticalAlignment
="Center"
>
<
TextBlock
x:Name
="txtDisplay"
FontSize
="24"
textAlignment
="Center"
Margin
="10"
text
="暂无内容"
/>
<
Button
x:Name
="btnRun"
Content
="从1到100累加"
Click
="OnRun"
Margin
="10"
/>
<
Button
x:Name
="btnCancel"
Content
="取 消"
Click
="OnCancel"
Margin
="10"
/>
</
StackPanel
>
</
Grid
>
接下来就是相应的cs代码了,相当的注释我已写入代码段中,相信大家看一下就会明白了:)
public
partial
class
Page : UserControl
{
private
System.ComponentModel.BACkgroundWorker worker;
private
int
sum
=
@H_946_
502@0
;
//
累加数
private
int
cur_number
=
@H_946_
502@1
;
//
当前数值
void
OnRun(
object
sender, EventArgs args)
{
worker
=
new
System.ComponentModel.BACkgroundWorker();
//
当前BACkgroundWorker所执行的操作
worker.DoWork
+=
OnDoWork;
//
绑定异步操作进度的事件
worker.ProgressChanged
+=
OnProgressChanged;
//
绑定操作成功完成的处理事件
worker.RunWorkerCompleted
+=
OnWorkCompleted;
//
是否报告进度更新
worker.WorkerReportsProgress
=
true
;
//
是否支持异步取消
worker.WorkerSupportsCancellation
=
true
;
//
开始执行后台操作
worker.RunWorkerAsync();
}
void
OnWorkCompleted(
object
sender, runWorkerCompletedEventArgs E)
{
if
(e.Error
!=
null
)
{
Exception ex
=
e.Error;
//
int x = 10;
}
if
(e.Cancelled)
{
txtDisplay.Text
=
"
取消!
"
;
}
else
{
txtDisplay.Text
+=
"
完毕, 开始调用WCF!
"
;
//
调用service服务
serviceClient proxy
=
new
serviceClient();
proxy.ShowmessageCompleted
+=
OnShowmessageCompleted;
proxy.ShowmessageAsync(
@H_946_
502@1
,
@H_946_
502@100
, sum);
}
}
void
OnProgressChanged(
object
sender, ProgressChangedEventArgs E)
{
txtDisplay.Text
=
e.ProgressPercentage.ToString();
}
void
OnDoWork(
object
sender, DoWorkEventArgs E)
{
//
throw new ApplicationException("Foo");
while
(cur_number
<=
@H_946_
502@100
&&
!
worker.CancellationPending)
{
Thread.Sleep(
@H_946_
502@100
);
sum
+=
cur_number;
cur_number
++
;
worker.ReportProgress(sum);
}
if
(worker.CancellationPending)
{
e.Cancel
=
true
;
}
}
void
OnShowmessageCompleted(
object
sender, ShowmessageCompletedEventArgs E)
{
if
(e.Error
!=
null
)
{
txtDisplay.Text
=
"
调用失败
"
;
}
else
{
txtDisplay.Text
=
e.Result.ToString();
}
}
void
OnCancel(
object
sender, EventArgs args)
{
sum
=
@H_946_
502@0
;
cur_number
=
@H_946_
502@0
;
//
取消异步操作
worker.CancelAsync();
}
}
另外还需要在cs文件中引用一下相应的名空间如下:
using
System.ComponentModel;
//
BACkgroundWorker
using
System.Threading;
using
BACkgroundWorker.service;
//
wcf引用名空间
现在就可以编译运行这个silverlight应用的(之前请先运行上面的wcf项目).
另外除了BACkgroundWorker,silverlight 2目前还可以使用DispatcherTimer组件定时器来
进行一些需要定时运行的任务.详见这里:)
看来SL真是越来越强大了.
源码下载,请点击这里:)
大佬总结
以上是大佬教程为你收集整理的在silverlight 2 (beta1) 中使用BackgroundWorker全部内容,希望文章能够帮你解决在silverlight 2 (beta1) 中使用BackgroundWorker所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。