2012-02-22 11 views
0

私のコードにいくつか問題があります。SilverLight with SharePointの非同期コード

var web = context.Web; 
List sharedDocumentsList = context.Web.Lists.GetByTitle("dokumenty"); 

int i = sharedDocumentsList.ItemCount; 

context.Load(sharedDocumentsList); 
context.ExecuteQueryAsync(OnFileWriteSucceeded, OnFileWriteFailed); 

しかし、私はまだ同じ問題を抱えて:私は、ドキュメントライブラリをロードし、このライブラリでは私のコードを共同しているどのように多くの項目についての情報を取得したいボタンがある押した後、私はSilverlightのボタンがあります。

コレクションが初期化されていません。要求されていないか、要求が実行されていません。それはexplixitly要求する必要があります

どのように私はItemCountを取得できますか?これは、サイクルなどでこのリストを操作する必要がある単純な例です。しかし、私はこの主な問題を解決する必要があります。ボタンのクリック方法でこの文書リストを直接操作する方法。

ありがとうございます。

+0

私は context.ExecuteQuery()でこれを行うためにしようとすると、 "呼び出されたメソッドまたはプロパティがUIスレッドをブロックする可能性があり、許可されていません。たとえば、System.Threading.ThreadPool.QueueUserWorkItemを使用してメソッドまたはプロパティを呼び出すには、バックグラウンドスレッドを使用してください。 。メソッドまたはプロパティを呼び出すため だから私のボタンをクリックする方法で、私は context.ExecuteQuery(でこれを行うことができないのです)法; しかし、また、私は、この非同期を行うと、結果を取得することができません ありがとうございました。 – user1223484

答えて

0

これは私の作品:

private List docList; 
private void GetList() 
{ 
    var context = new ClientContext(ApplicationContext.Current.Url); 
    context.Load(context.Web); 
    docList = context.Web.Lists.GetByTitle("dokumenty"); 
    context.Load(docList); 
    context.ExecuteQueryAsync(GetListSucceded, GetListFailed); 
} 

private void GetListFailed(object sender, ClientRequestFailedEventArgs e) 
{    
    Dispatcher.BeginInvoke(() => MyErrorFunction(); 
} 

private void GetListSucceded(object sender, ClientRequestSucceededEventArgs e) 
{ 
    Dispatcher.BeginInvoke(() => GetItemsCount()); 
} 

private void GetItemsCount() 
{ 
    MessageBox.Show(docList.ItemCount.ToString()); 
}