SharePoint用のSilverlightアプリを開発していて、リストからListItemsを取得したいと考えています。UIスレッドのブロックを回避するために、非同期でクエリを実行する必要があることはわかっています。通常、私はExecuteQueryAsyncを使用しますが、結果をDataGridソースとして設定したいので、それは機能しません。
GetItemsFromListメソッドを非同期で呼び出し、コードのオーバーヘッドをあまり作成せずに結果をDataGridソースとして設定するにはどうすればよいですか?(ラムダ?)
SharePointHelperクラス:
public static ListItemCollection GetItemsFromList(string name)
{
var context = ClientContext.Current;
var targetList = context.Web.Lists.GetByTitle("ListName");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = string.Format("<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where></Query>RowLimit>4</RowLimit></View>",
name);
ListItemCollection collListItems = targetList.GetItems(camlQuery);
context.ExecuteQuery();
return collListItems;
}
UIクラス:
private void SetDataGridItemSource()
{
dataGrid.Source = GetItemsFromList("name");
}
ShawnKendrotのソリューションを実装しました。
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
{
args.Result = SharePointHelpers.GetItemsFromList("name");
};
worker.RunWorkerCompleted += (s, e) => dataSource.Source = e.Result as ListItemCollection;
worker.RunWorkerAsync();