J'essaie d'accéder aux éléments d'une liste SharePoint 2010 à partir d'une partie Web personnalisée. Lorsque vous utilisez le thread, la propriété List.ItemCount est précise, mais la collection d'éléments est vide. Est-ce que quelqu'un a trouvé un moyen de contourner cela? Mon code pour accéder à la liste est ci-dessous:Est-il possible d'accéder à une liste SharePoint 2010 en utilisant le multi-thread dans un composant WebPart?
protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
{
Thread wThread = new Thread(new ThreadStart(WriteW));
//only showing one thread for simplicity
wThread.Start();
Thread.Sleep(500);
while (threadcount > 0)
{
Thread.Sleep(400);
}
lblGreeting.RenderControl(writer);
}
public void WriteW()
{
lock (lockobject)
{
threadcount++;
}
SPSite spsConflictSite = new SPSite("http://myserver/mysite");
SPWeb spwConflictWeb = spsConflictSite.OpenWeb();
SPList splConflictList = spwConflictWeb.Lists["Thread Tester List"];
DataTable myTable = splConflictList.Items.GetDataTable();
lblGreeting.Text += " " + myTable.Rows[0]["Title"].ToString();
spsConflictSite.Dispose();
lock (lockobject)
{
threadcount--;
}
}
Je ne peux pas dire pour positif et je voudrais entendre la réponse car j'ai un composant WebPart que je serais ravi de multithread. Cependant, vous avez des problèmes de concurrence dans le code que vous avez affiché. Pendant que vous verrouillez l'écriture de votre variable de membre 'threadcount' dans la méthode' WriteW', vous devriez faire la même chose avec la méthode 'RenderContents'. –
De plus, bien que vous ayez correctement '' Dispose'' de 'spsConflictSite', vous devriez faire la même chose avec' spwConflictWeb' et 'myTable' car ils implémentent tous les deux' IDisposable'. –
Merci pour les commentaires. C'est, pour la plupart, une version bonjour du vrai programme faite pour tester le problème d'accès à la liste. J'ai laissé tomber beaucoup pour la simplicité. – Starwfanatic