当前位置:Gxlcms > asp.net > Silverlight中同步调用WebClient的解决办法,是同步!

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

时间:2021-07-01 10:21:17 帮助过:33人阅读

代码如下:
代码如下:
  1. <br>private void button2_Click(object sender, RoutedEventArgs e) <br>{ <br>Service1Client sc = new Service1Client(); <br>sc.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(sc_DoWorkCompleted); <br>sc.DoWorkAsync(textBox1.Text); <br>} <br>void sc_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e) <br>{ <br>textBox2.Text = e.Result; <br>} <br> <br>
  2. <p>若是你的调用非常复杂的话,比如当这个调用完成的时候开始下一个调用,然后又进行下一个调用,各个调用之间存在关联关系的话,一直XX_DoWorkCompleted会让你头大,并且不利于代码的管理。若碰到过这样的问题的朋友一定很希望如果能够同步调用就好了,这篇文章将帮到你。或者现在不需要,等你需要的时候记得用就行了,别像我当初那样难为的不行。</p>
  3. <p>主要是需要引用一个类库的问题,这个类库是外国人写的,名称为DanielVaughan.dll,下载完之后,首先需要在项目中添加对它的引用,如下图,</p>
  4. <p><img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20110407184731748.jpg"></p>
  5. <p>然后在程序中添加对两个空间的引用,如下图:<br><br><img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20110407184731307.jpg"><br><br>将原来的添加botton1事件:<br><span><u></u></span> 代码如下:</p><pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>private void button1_Click(object sender, RoutedEventArgs e) <br>{ <br>string dd = textBox1.Text; <br>string res = "NULL"; <br>ThreadPool.QueueUserWorkItem(delegate <br>{ <br>Service1 sv = ChannelManager.Instance.GetChannel<Service1>(); <br>/* Perform synchronous WCF call. */ <br>res = SynchronousChannelBroker.PerformAction<string, string>(sv.BeginDoWork, sv.EndDoWork, dd); <br>Dispatcher.BeginInvoke(delegate <br>{ <br>textBox2.Text +="\r\n同步调用--"+ res+"\r\n"; <br>}); <br>}); <br>} <br> <br>这样就可以实现对WebClient的同步调用了,当你需要关联调用WebClient3次以上的时候 可以考虑使用这个类库,如果只是简单的调用下的话,没有必要使用。 <br>页面全部代码: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><UserControl x:Class="SilverlightApplication2.MainPage" <br>xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <br>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <br>xmlns:d="http://schemas.microsoft.com/expression/blend/2008" <br>xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" <br>mc:Ignorable="d" <br>d:DesignHeight="300" d:DesignWidth="400" xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" Width="640" Height="480"> <br><Grid x:Name="LayoutRoot"> <br><Grid.Background> <br><LinearGradientBrush EndPoint="0.443,0.621" StartPoint="0.443,-2.509"> <br><GradientStop Color="#FF5C6768"/> <br><GradientStop Color="White" Offset="1"/> <br></LinearGradientBrush> <br></Grid.Background> <br><Button Content="同步调用服务" Height="40" HorizontalAlignment="Left" Margin="67,98,0,0" Name="button1" VerticalAlignment="Top" Width="120" Click="button1_Click" /> <br><dataInput:Label Height="50" HorizontalAlignment="Left" Margin="67,188,0,0" Name="label2" VerticalAlignment="Top" Width="46" Content="状态:" FontSize="16" /> <br><TextBox Height="40" HorizontalAlignment="Left" Margin="165,27,0,0" Name="textBox1" VerticalAlignment="Top" Width="300" FontSize="16" /> <br><TextBox Height="100" HorizontalAlignment="Left" Margin="146,188,0,0" Name="textBox2" VerticalAlignment="Top" Width="400" FontSize="16" TextWrapping="Wrap" Text="尚未调用服务" /> <br><Button Content="异步调用服务" Height="40" HorizontalAlignment="Left" Margin="346,98,0,0" Name="button2" VerticalAlignment="Top" Width="120" Click="button2_Click" /> <br><dataInput:Label Height="40" HorizontalAlignment="Left" Margin="67,27,0,0" Name="label1" VerticalAlignment="Top" Width="92" FontSize="16" Content="输入文本:" /> <br></Grid> <br></UserControl> <br> <br>处理程序全部代码: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>using System; <br>using System.Collections.Generic; <br>using System.Linq; <br>using System.Net; <br>using System.Windows; <br>using System.Windows.Controls; <br>using System.Windows.Documents; <br>using System.Windows.Input; <br>using System.Windows.Media; <br>using System.Windows.Media.Animation; <br>using System.Windows.Shapes; <br>using SilverlightApplication2.ServiceReference1; <br>using System.Threading; <br>using DanielVaughan; <br>namespace SilverlightApplication2 <br>{ <br>public partial class MainPage : UserControl <br>{ <br>public MainPage() <br>{ <br>InitializeComponent(); <br>UISynchronizationContext.Instance.Initialize(Dispatcher); <br>} <br>private void button1_Click(object sender, RoutedEventArgs e) <br>{ <br>string dd = textBox1.Text; <br>string res = "NULL"; <br>ThreadPool.QueueUserWorkItem(delegate <br>{ <br>Service1 sv = ChannelManager.Instance.GetChannel<Service1>(); <br>/* Perform synchronous WCF call. */ <br>res = SynchronousChannelBroker.PerformAction<string, string>(sv.BeginDoWork, sv.EndDoWork, dd); <br>Dispatcher.BeginInvoke(delegate <br>{ <br>textBox2.Text +="\r\n同步调用--"+ res+"\r\n"; <br>}); <br>}); <br>} <br>private void button2_Click(object sender, RoutedEventArgs e) <br>{ <br>Service1Client sc = new Service1Client(); <br>sc.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(sc_DoWorkCompleted); <br>sc.DoWorkAsync(textBox1.Text); <br>} <br>void sc_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e) <br>{ <br>textBox2.Text += "异步调用--" + e.Result + "\r\n"; <br>} <br>} <br>} <br> <br>Service代码: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>using System; <br>using System.Linq; <br>using System.Runtime.Serialization; <br>using System.ServiceModel; <br>using System.ServiceModel.Activation; <br>namespace SilverlightApplication2.Web <br>{ <br>[ServiceContract(Namespace = "")] <br>[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] <br>public class Service1 <br>{ <br>[OperationContract] <br>public string DoWork(string aa) <br>{ <br>// 在此处添加操作实现 <br>return "调用服务完成,返回你输入的值:"+aa; <br>} <br>// 在此处添加更多操作并使用 [OperationContract] 标记它们 <br>} <br>} <br> <br><p></p></li><li><p>程序运行截图:</p></li><li><p>1.<img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20110407184731755.jpg"><br><br>2.<img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20110407184732756.jpg"><br><br>3.<br><img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20110407184732167.jpg"><br><br><br><br>欢迎大家共同探讨,觉得好的话请推荐下。本人技术水平有限,如有不足之处,还请园友多多批评指正,谢谢。</p></li><li> </li><li> </li></ol></pre></li></ol></pre></li></ol></pre></li></ol></pre>

人气教程排行