SL调用WCF方法,默认是异步的,但有些情况,我们使用同步会来的方便些,下面的文章提供了一种方式。
http://www.codeproject.com/KB/silverlight/SynchronousSilverlight.aspx
上述提供的方式是基于服务端WCF服务接口实现,可是有时不需要WCF服务接口,下面对此进行补充:
WCF服务如下:
namespace DanielVaughan.Silverlight.Examples.Web
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService //: ISimpleService
{
//static int connectionCount;
[OperationContract]
public string GetGreeting(string name)
{
Thread.Sleep(2000);
return "Hi " + name;
}
[OperationContract]
public List<string> GetDataList()
{
List<string> dataList = new List<string>();
Random r = new Random(DateTime.Now.Millisecond);
int max = r.Next(100);
for (int i = 0; i <max ; i++)
{
Thread.Sleep(100);
dataList.Add(i.ToString());
}
return dataList;
}
//public string InitiateConnection(string arbitraryIdentifier)
//{
// return (++connectionCount).ToString();
//}
}
}
客户端:
private void btnGetDataSynch_Click(object sender, RoutedEventArgs e)
{
this.lbData.ItemsSource = null;
ThreadPool.QueueUserWorkItem(delegate
{
DisplayMessage("同步获取数据中...");
var ws = ChannelManager.Instance.GetChannel<SimpleService>();
try
{
ObservableCollection<string> dataList = SynchronousChannelBroker.PerformAction<ObservableCollection<string>>(ws.BeginGetDataList, ws.EndGetDataList);
//if (Dispatcher.CheckAccess())
//{
// this.lbData.ItemsSource = dataList;
//}
//else
//{
// Dispatcher.BeginInvoke(delegate
// {
// this.lbData.ItemsSource = dataList;
// });
//}
DisplayData(this.lbData, dataList);
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace);
}
DisplayMessage("同步获取数据完成");
});
}
void DisplayMessage(string message)
{
DisplayText(this.tbMsg, message);
}
void DisplayText(TextBlock textBlock, string message)
{
if (Dispatcher.CheckAccess())
{
textBlock.Text = message;
}
else
{
Dispatcher.BeginInvoke(delegate
{
textBlock.Text = message;
});
}
}
void DisplayData(ListBox listBox, ObservableCollection<string> dataList)
{
if (Dispatcher.CheckAccess())
{
listBox.ItemsSource = dataList;
}
else
{
Dispatcher.BeginInvoke(delegate
{
listBox.ItemsSource = dataList;
});
}
}
分享到:
相关推荐
(14)silverlight网络通信与开发示例
Silverlight socket通信Dome
silverlight与wcf通信简单应用
Silverlight与WCF同步操作,通过修改实体属性,或回调函数,返回值结果或状态。
Silverlight Socket通信
从建立Silverlight应用程序,一步一步到建立WCF通信
Silverlight sl 网络通信,学习好资料
Silverlight 中的 HTTP 通信和安全
Silverlight4网络通信 学习Silverlight4的好资料
4.Silverlight通过WCF与数据库通信 5.Silverlight利用LINQ操作数据库 6.Silverlight控件布局 7.Silverlight数据绑定技术 8.Silverlight事件处理 9.Silverlight控件样式和控件模板 10.应用Blend工具进行开发
例子中,silverlight是客户端(这是当然的),服务端也是用C#语言 仔细搜索了一下大家写的东西,感觉这个还可以,就拿出来分享给大家,希望对大家有点小用吧 总结Silverlight中应用Socket的几点特殊之处 1.所有的...
多个Silverlight学习源代码:silverlight toolkit中的主题(theme)应用、SilverLight 桌面文件夹效果源码、Silverlight4.0 Demo 源码、Silverlight5 beta新特性源码、SilverlightDataGrid、SilverlightMVVM模式...
Microsoft Silverlight 是...网络和通信 调试、错误处理和异常 部署和本地化 性能 安全性 常规参考 外部资源 Silverlight.net Silverlight 下载站点 脱机 Silverlight 文档(CHM 文件) Silverlight SDK 博客
Silverlight 3 wcf 双工通信
silverlight5_sdk 安装包
silverlight实现数据源和控件同步更新
Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例Silverlight示例
silverlight 数据压缩例子,可在silverlight通信的时候使用,优化数据传输 http://www.dotnetdev.cn
silverlight SDK 4.0.50303 在VS2010中需要配套相同版本的silverlight 4.0.50303才能使用。