一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Silverlight中同步調用WebClient的解決辦法,是同步!

Silverlight中同步調用WebClient的解決辦法,是同步!

2019-09-14 20:56asp.net教程網 ASP.NET教程

如何建立web服務并引用的細節,不是本文的介紹的目標,不再贅述。在silverlight調用服務器端服務的時候,默認情況下是進行異步調用的

代碼如下: 

復制代碼代碼如下:


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; 

 

若是你的調用非常復雜的話,比如當這個調用完成的時候開始下一個調用,然后又進行下一個調用,各個調用之間存在關聯關系的話,一直XX_DoWorkCompleted會讓你頭大,并且不利于代碼的管理。若碰到過這樣的問題的朋友一定很希望如果能夠同步調用就好了,這篇文章將幫到你。或者現在不需要,等你需要的時候記得用就行了,別像我當初那樣難為的不行。

主要是需要引用一個類庫的問題,這個類庫是外國人寫的,名稱為DanielVaughan.dll,下載完之后,首先需要在項目中添加對它的引用,如下圖,

Silverlight中同步調用WebClient的解決辦法,是同步!

然后在程序中添加對兩個空間的引用,如下圖:

Silverlight中同步調用WebClient的解決辦法,是同步!

將原來的添加botton1事件:

復制代碼代碼如下:


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次以上的時候 可以考慮使用這個類庫,如果只是簡單的調用下的話,沒有必要使用。 
頁面全部代碼: 

復制代碼代碼如下:


<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> 


處理程序全部代碼: 

復制代碼代碼如下:


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代碼: 

復制代碼代碼如下:


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.Silverlight中同步調用WebClient的解決辦法,是同步!

2.Silverlight中同步調用WebClient的解決辦法,是同步!

3.
Silverlight中同步調用WebClient的解決辦法,是同步!

歡迎大家共同探討,覺得好的話請推薦下。本人技術水平有限,如有不足之處,還請園友多多批評指正,謝謝。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 吃胸膜奶视频456 | 欧美最猛性xxxxx动态图 | 欧美日韩国产精品自在自线 | 国产亚洲精品激情一区二区三区 | 91在线 在线播放 | 亚洲丰满模特裸做爰 | 四虎最新永久免费网址 | 欧美日韩亚洲国内综合网俺 | 呜呜别塞了啊抽插 | 九九99热 | 日本一本草久p | 欧美精品色精品一区二区三区 | 动漫美女羞羞 | 艹b视频在线观看 | tube69中国露脸 | 免费在线观看网址大全 | 精新精新国产自在现拍 | 我们中文在线观看免费完整版 | 亚洲区一 | 日本最新伦中文字幕 | yin娃sao货调教情趣用品店 | 国产探花在线视频 | 日本视频在线播放 | 免费视频| 40岁女人三级全黄 | 美国女网址www呦女 美国复古性经典xxxxx | 久热在线这里只有精品7 | 窝窝影院午夜色在线视频 | 女教师波多野结衣高清在线 | 欧美成人禁片在线观看俄罗斯 | 亚洲天堂一区二区在线观看 | 俺去俺去啦最新官网在线 | b站免费 | 粉嫩高中生第一次不戴套 | 国产欧美精品一区二区三区–老狼 | 欧美亚洲国产综合在线 | 九九99热久久精品在线6 | 亚洲欧美日韩天堂在线观看 | 黑人草| 毛茸茸的大逼 | 福利入口在线观看 |