宝哥软件园

在Silverlight中同步调用WebClient的解决方案是同步!

编辑:宝哥软件园 来源:互联网 时间:2021-10-20

代码如下:复制代码如下:private void button2 _ click(对象发送方,路由事件参数e){ service 1 client sc=new service 1 client();即DoWorkCompleted=new eventhandlerdowworkcompletedeventargs(sc _ DoWorkCompleted);即DoWorkAsync(textBox1。文本);} void sc_DoWorkCompleted(对象发送者,DoWorkCompletedEventArgs e){ textbox 2。文本=结果;}如果你的调用非常复杂,比如这个调用完成后,开始下一个调用,然后进行下一个调用,所有调用之间存在关联关系,XX _ DoWorkCompleted会让你的头变大,不利于代码管理。如果你遇到过这样的问题,你的朋友愿意同步调用。这篇文章会帮助你。或者现在不需要,只要记得在需要的时候用就行,不要像我当年那么难。主要问题是需要参考一个类库,这个类库是外国人写的,名字叫DanielVaughan.dll。下载后,首先需要在项目中添加对它的引用,如下图所示

然后在程序中添加对两个空格的引用,如下图所示:

将原来的添加瓶子一事件:复制代码代码如下:私有作废按钮1 _点击(对象发送方,Routedeventargs e){ string DD=textbox 1 .文字;字符串RES=“空”;线程池QueueUserWorkItem(委托{ Service1 sv=ChannelManager .实例。getchannelservice 1();/*执行同步世界商会联合会呼叫*/res=SynchronousChannelBroker .性能字符串。开始工作EndDoWork,DD);调度员BeginInvoke(委托{文本框2 .Text='rn同步调用-' RES ' r n;});});} 这样就可以实现对没用过的同步调用了,当你需要关联调用网络客户端3次以上的时候可以考虑使用这个类库,如果只是简单的调用下的话,没有必要使用。

页面全部代码:复制代码代码如下:用户控件x :类=' Silverlightapplication 2 .主页' xmlns=' http://架构。微软。com/winfx/2006/xaml/presentation ' xmlns : x=' http://架构。微软。com/winfx/2006/xaml ' xmlns :d=' http://架构。微软。com/expression/blend/2008 ' xmlns : MC=' http://schemas。openxmlformas。org/markup-compatibility/2006 '窗口。控件;装配=系统窗户。控件。数据。输入' Width=' 640 ' Height=' 480 ' Grid x : name=' LayoutRoot ' Grid .背景线性渐变画笔端点='0.443,0.621 '开始点='0.443,-2.509 '渐变停止颜色='#FF5C6768'/渐变停止颜色='白色'偏移='1'/线性渐变画笔/网格。背景按钮内容='同步调用服务高度='40 '水平对齐='左侧'边距='67,98,0,0 '名称='按钮1 '垂直对齐='顶部'宽度='120 '单击='按钮1 _单击'/数据输入:标签高度='50 '水平对齐='左侧'边距='67,188,0,0 '名称='标签2 '垂直对齐='顶部'宽度='46 '内容='状态:' font size=' 16 '/TextBox Height=' 40 '水平对齐='左侧'边距='165,27,0,0 '名称='textBox1 '垂直对齐=' Top ' Width=' 300 ' font size=' 16 '/TextBox Height=' 100 '水平对齐='左侧'边距='146,188,0,0 '名称='文本框2 '垂直对齐='Top' Width='400' FontSize='尚未调用服务/按钮内容='异步调用服务高度='40 '水平对齐='左侧'边距='346,98,0,0 '名称='按钮2 '垂直对齐='顶部'宽度='120 '单击='按钮2 _单击'/数据输入:标签高度='40 '水平对齐='左侧'边距='67,27,0,0 '名称='标签1 '垂直对齐='顶部'宽度='92 '字体大小='16 '内容='输入文本:'//网格/用户控件处理程序全部代码:复制代码代码如下:使用系统; 使用系统。集合。通用;使用系统Linq .使用系统。净值;使用系统窗户.使用系统。窗口。控件;使用系统。窗口。文档;使用系统。窗口。输入;使用系统窗户。媒体使用系统窗户。媒体。动画;使用系统。窗户。形状;使用SilverlightApplication2 .ServiceReference1使用系统。穿线;使用丹尼尔沃根;命名空间SilverlightApplication2 { public分部类主页面:用户控件{ public main page(){ initialize component();UISynchronizationContext .实例。初始化(调度程序);}私人作废按钮1 _点击(对象发送者,Routedeventargs e){ string DD=textbox 1 .文字;字符串RES=“空”;线程池QueueUserWorkItem(委托{ Service1 sv=ChannelManager .实例。getchannelservice 1();/*执行同步世界商会联合会呼叫*/res=SynchronousChannelBroker .性能字符串。开始工作EndDoWork,DD);调度员BeginInvoke(委托{文本框2 .Text='rn同步调用-' RES ' r n;});});}私有作废按钮2 _点击(对象发送方,RoutedEventArgs e){服务1客户端sc=新服务1客户端();即DoWorkCompleted=new eventhandlerdoworkcompletedeventargs(sc _ DoWorkCompleted);即DoWorkAsync(textBox1 .文本);} void sc_DoWorkCompleted(对象发送者,DoWorkCompletedEventArgs e){ textbox 2 .文本='异步调用-e。结果 r n ';} } }服务代码:复制代码代码如下:使用系统;使用系统Linq .使用系统。运行时。序列化;使用系统服务模式.使用系统ServiceModel .激活;命名空间SilverlightApplication2 .Web { [ServiceContract(命名空间=' ')][aspnet compatibility requirements(需求模式=aspnet compatibility requirements模式.允许的)])公共类Service1 { [OperationContract]公共字符串DoWork(字符串aa) { //在此处添加操作实现"返回"调用服务完成,返回你输入的值: ' aa} //在此处添加更多操作并使用[运营合同]标记它们} } 程序运行截图:1.

2.

3.

欢迎大家一起讨论。如果你觉得不错,请推荐。我的技术水平有限。如有不足,请园友多批评指正。谢谢你。

更多资讯
游戏推荐
更多+