源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Silverlight中同步调用WebClient的解决办法,是同步!

  • 时间:2022-03-14 21:47 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Silverlight中同步调用WebClient的解决办法,是同步!
代码如下:
[url=http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=clog&DownloadId=204503&FileTime=129409609926300000&Build=17672]DanielVaughan.dll[/url],下载完之后,首先需要在项目中添加对它的引用,如下图, [img]http://files.jb51.net/upload/201104/20110407184731748.jpg[/img] 然后在程序中添加对两个空间的引用,如下图: [img]http://files.jb51.net/upload/201104/20110407184731307.jpg[/img] 将原来的添加botton1事件:
[u]复制代码[/u] 代码如下:
private void button1_Click(object sender, RoutedEventArgs e) { string dd = textBox1.Text; string res = "NULL"; ThreadPool.QueueUserWorkItem(delegate { Service1 sv = ChannelManager.Instance.GetChannel<Service1>(); /* Perform synchronous WCF call. */ res = SynchronousChannelBroker.PerformAction<string, string>(sv.BeginDoWork, sv.EndDoWork, dd); Dispatcher.BeginInvoke(delegate { textBox2.Text +="\r\n同步调用--"+ res+"\r\n"; }); }); }
这样就可以实现对WebClient的同步调用了,当你需要关联调用WebClient3次以上的时候 可以考虑使用这个类库,如果只是简单的调用下的话,没有必要使用。 页面全部代码:
[u]复制代码[/u] 代码如下:
<UserControl x:Class="SilverlightApplication2.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" Width="640" Height="480"> <Grid x:Name="LayoutRoot"> <Grid.Background> <LinearGradientBrush EndPoint="0.443,0.621" StartPoint="0.443,-2.509"> <GradientStop Color="#FF5C6768"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </Grid.Background> <Button Content="同步调用服务" Height="40" HorizontalAlignment="Left" Margin="67,98,0,0" Name="button1" VerticalAlignment="Top" Width="120" Click="button1_Click" /> <dataInput:Label Height="50" HorizontalAlignment="Left" Margin="67,188,0,0" Name="label2" VerticalAlignment="Top" Width="46" Content="状态:" FontSize="16" /> <TextBox Height="40" HorizontalAlignment="Left" Margin="165,27,0,0" Name="textBox1" VerticalAlignment="Top" Width="300" FontSize="16" /> <TextBox Height="100" HorizontalAlignment="Left" Margin="146,188,0,0" Name="textBox2" VerticalAlignment="Top" Width="400" FontSize="16" TextWrapping="Wrap" Text="尚未调用服务" /> <Button Content="异步调用服务" Height="40" HorizontalAlignment="Left" Margin="346,98,0,0" Name="button2" VerticalAlignment="Top" Width="120" Click="button2_Click" /> <dataInput:Label Height="40" HorizontalAlignment="Left" Margin="67,27,0,0" Name="label1" VerticalAlignment="Top" Width="92" FontSize="16" Content="输入文本:" /> </Grid> </UserControl>
处理程序全部代码:
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using SilverlightApplication2.ServiceReference1; using System.Threading; using DanielVaughan; namespace SilverlightApplication2 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); UISynchronizationContext.Instance.Initialize(Dispatcher); } private void button1_Click(object sender, RoutedEventArgs e) { string dd = textBox1.Text; string res = "NULL"; ThreadPool.QueueUserWorkItem(delegate { Service1 sv = ChannelManager.Instance.GetChannel<Service1>(); /* Perform synchronous WCF call. */ res = SynchronousChannelBroker.PerformAction<string, string>(sv.BeginDoWork, sv.EndDoWork, dd); Dispatcher.BeginInvoke(delegate { textBox2.Text +="\r\n同步调用--"+ res+"\r\n"; }); }); } private void button2_Click(object sender, RoutedEventArgs e) { Service1Client sc = new Service1Client(); sc.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(sc_DoWorkCompleted); sc.DoWorkAsync(textBox1.Text); } void sc_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e) { textBox2.Text += "异步调用--" + e.Result + "\r\n"; } } }
Service代码:
[u]复制代码[/u] 代码如下:
using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; namespace SilverlightApplication2.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 { [OperationContract] public string DoWork(string aa) { // 在此处添加操作实现 return "调用服务完成,返回你输入的值:"+aa; } // 在此处添加更多操作并使用 [OperationContract] 标记它们 } }
程序运行截图: 1.[img]http://files.jb51.net/upload/201104/20110407184731755.jpg[/img] 2.[img]http://files.jb51.net/upload/201104/20110407184732756.jpg[/img] 3. [img]http://files.jb51.net/upload/201104/20110407184732167.jpg[/img] 欢迎大家共同探讨,觉得好的话请推荐下。本人技术水平有限,如有不足之处,还请园友多多批评指正,谢谢。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部