做了一个简单的SilverLight WebPart,但第一次做起来并不轻松,除了各种各样的Issue,譬如OnRequestSucceeded没有被触发是因为没有注册OnRequestFailed而执行Fail的原因,但是在OnRequestFailed里面的代码(简单的弹出消息)失败的原因应该与线程有关,总结了各种经验:

第一,当我们使用context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), new ClientRequestFailedEventHandler(OnRequestFailed));来注册事件的时候,不要在OnRequestSucceeded或者OnRequestFailed事件里直接写代码,这个会报线程冲突的错误。应该使用代理。

Dispatcher.BeginInvoke(delegate()
{
      MessageBox.Show("inside OnRequestSucceeded Method" + args.StackTrace.ToString() + args.ErrorDetails);
});

第二个,context的参数指定一定要使用ApplicationContext.Current.Url,否则在运行的时候会报Security的错误(太搞了,我直接使用ClientContext(“http://localhost”)一直报这个错误,SharePoint的设计也太次了,难道是因为不确认是否在本站运行?有些网站里面提到要部署ClientAccessPolicy.xml在IIS根站点目录下,至少对SilverLight WebPart是没有意义的。)

ClientContext context = new ClientContext(ApplicationContext.Current.Url);

第三个,总结学到的SilverLight里两种异步执行的方式

1)clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed),注册成功执行后的时间以及失败后的事件

2)通过多线程调用System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ThreadCallback), context);

一个小技巧点:

Silverlight重新部署后不需要重启IIS或者重置Application Pool,删除IE的客户端缓存就可以。

源码:

public partial class MainPage : UserControl{public class Project{public string Title{get;set;}public DateTime DueDate{get;set;}public string Description{get;set;}}private ListItemCollection _projects;public MainPage(){InitializeComponent();ClientContext context = new ClientContext(ApplicationContext.Current.Url); //System.Threading.SynchronizationContext thread = System.Threading.SynchronizationContext.Current; if (thread == null)//thread = new System.Threading.SynchronizationContext();//ClientContext context = new ClientContext("http://localhost");//context.AuthenticationMode = Microsoft.SharePoint.Client.ClientAuthenticationMode.Default;context.Load(context.Web);List Projects = context.Web.Lists.GetByTitle("Tasks");context.Load(Projects);CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery();string camlQueryXml = "<View><Query><Where><Gt>" +"<FieldRef Name='DueDate' />" +"<Value Type='DateTime'>2008-01-1T00:00:00Z</Value>" +"</Gt></Where></Query><ViewFields>" +"<FieldRef Name=\"Title\" /><FieldRef Name=\"Body\" />" +"<FieldRef Name=\"DueDate\" />" +"</ViewFields></View>";query.ViewXml = camlQueryXml;_projects = Projects.GetItems(query);context.Load(_projects);//MessageBox.Show("Test!");//context.ExecuteQuery();//System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ThreadCallback), context);context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), new ClientRequestFailedEventHandler(OnRequestFailed));}/*private void ThreadCallback(object s){// var context = (ClientContext)s;// context.ExecuteQuery();this.Dispatcher.BeginInvoke(BindData);}*/private void OnRequestFailed(Object sender, ClientRequestFailedEventArgs args){// this is not called on the UI thread //MessageBox.Show("inside OnRequestFailed Method");this.Dispatcher.BeginInvoke(delegate(){MessageBox.Show("inside OnRequestSucceeded Method" + args.StackTrace.ToString() + args.ErrorDetails);});}private void OnRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args) { // this is not called on the UI thread //MessageBox.Show("inside OnRequestSucceeded Method");this.Dispatcher.BeginInvoke(BindData); }private void Failed(ClientRequestFailedEventArgs args){MessageBox.Show("inside OnRequestFailed Method" + args);}private void BindData() { List<Project> projects = new List<Project>();foreach (ListItem li in _projects) { projects.Add(new Project() { Title = li["Title"].ToString(), DueDate = Convert.ToDateTime(li["DueDate"].ToString()), Description = li["Body"].ToString() }); }dataGrid1.ItemsSource = projects; }}

转载于:https://www.cnblogs.com/johnsonwong/archive/2011/05/08/2040266.html

SliverLight Web part相关推荐

  1. 最新的全球编程语言,操作系统,web服务器等使用率分析报告

    由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告,并每天持续更新. 1.服务器端编程语言排名 http://w3techs.com/technologies/ov ...

  2. SliverLight注册字典转换器方法

    SliverLight注册资源--本处以添加字典转换器为列. 该列子中,是动态添加DataGrid复杂表头,而数据源是字典集合,因此使用传统的数据绑定就不能(个人能力)实现. 添加表头并绑定数据代码如 ...

  3. JavaScript会是Web开发的未来吗?

    世界真奇妙,转了一圈又回到了原点. 1 事情要从JavaScript说起,这个曾经的屌丝经过多年的奋战,成功逆袭,成为前端之王. (详情参见:<JavaScript 一个屌丝的逆袭>) 这 ...

  4. 使用 HttpLib 来访问 Web 服务

    介绍 C# 为开发者提供很多便利方法用来访问各种 Web 服务,但是编写异步的访问方式却是有点复杂.Windows 通讯框架是一个客户端/服务器通讯非常棒的工具.我精彩发现我自己必须写很多代码来使用已 ...

  5. Web前端行业的了解

    即将从事Web前端的工作的 先对即将从事的行业有个了解. Web前端发展史: 第一个网页诞生于90年代初,早期的网页除了一些小图片和毫无布局可言的标题段落,其全由文字构成.然而随着时代的进步,互联网的 ...

  6. html5开发wp8,WP7几则消息(HTML5,Sliverlight,WP8)

    Winrumors 又有关于WP7的几则新消息传出: 1. Windows Phone 7 的第一个更新将于 1月放出,包含包括复制粘贴在内的功能更新,而二月又将放出一次更新:第三方应用的多任务支持, ...

  7. 谁能想到微软CRM也能用上SliverLight?——微软CRM炫酷介绍之二

    如今SliverLight如火如荼,其美轮美奂的变现力正让大家不知不觉为之激动,每个人都能成为造梦师,轻轻松松地就能让梦境在Web上展现出来.然而,谁能想到,中规中矩的业务密集型的软件产品微软CRM也 ...

  8. Android的,iOS的,PHP的,大数据的,Java的,web前端的,C++,Python等干货分享

    这是一些学习资源,里面有Android的,iOS的,PHP的,大数据的,Java的,web前端的,C++,Python的-. 有的来源地址是在一个公众号的群.感谢群主的分享.有的是我以前收集的.在此我 ...

  9. Sliverlight开篇

    序言 这是我第一次接触Sliverlight,因为这个项目的框架整体式MVVM模式的,第一次看完全不知道怎么看,于是就找了一些学习资料,自己也就总结了点东西! 开篇 1:对于一个新建的SL项目,会自动 ...

最新文章

  1. C++ 命名空间 实战(一)
  2. [读者调查]新增一个读者调查!
  3. python pip全称_“ pip install”和“ pip install”之间有什么区别和“ python -m pip install”?...
  4. 工程之道 | CPU推理性能提高数十倍,MegEngine计算图、MatMul优化解析
  5. JavaScript 统计中英混合字符串的长度
  6. PLSQL无法连接64位Oracle数据库/Database下拉框为空的解决方法
  7. 盘点云计算的概念,分类和特点
  8. 机器学习算法概述——摘录《机器学习算法导论》
  9. 使用Instsrv.exe和Srvany.exe 安装windows服务
  10. 什么是拓扑结构_拓扑结构图
  11. 如何用u盘给惠普服务器安装系统,如何用u盘装惠普系统教程
  12. html和jsp轮播,jsp页面、图片轮播
  13. Flask Web学习(5)----Markdown 和Flask -Pagedown的使用
  14. c# ffmpeg视频转换
  15. java P1496 火烧赤壁
  16. 内网沟通软件都有哪些?
  17. Android偷偷进了PC村,Google是无心插柳还是扮猪吃虎?
  18. SQL Server如何创建临时表并插入数据
  19. 团队-石头剪刀布-最终程序
  20. 游戏配音最重要的两点

热门文章

  1. 通过docker搭建zabbix监控系统
  2. 2017前端框架何去何从
  3. 工作进度总结汇报01
  4. Android上webview界面切换动画效果
  5. 教你轻松恢复Linux口令
  6. 菜鸟requireJS教程---1、初识requirejs
  7. 阿里云实现putty私钥登录全过程
  8. 数据库 - mysql内置功能
  9. Python: The _imagingft C module is not installed错误的解决
  10. mysql 运行 sql 脚本