2010-11-23 63 views
2

我正在尝试从自定义Web部件访问SharePoint 2010列表中的项目。使用线程时,List.ItemCount属性是准确的,但是项目集合是空的。有没有人找到解决这个问题的方法?我的代码访问列表如下:是否可以使用Web部件中的多线程访问SharePoint 2010列表?

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--; 
     } 
    } 
+0

我不能说积极,我想听到答案,因为我有一个SP网络部分,我很想多线程。但是,您在显示的代码中确实存在并发问题。当您在`WriteW`方法中锁定'threadcount`成员变量的写入时,您应该在`RenderContents`方法中读取它时做同样的事情。 – 2010-11-23 22:20:18

回答

0

我认为在线程中使用Dispose可能是一个问题。尝试在使用语句中包装SPSite调用,以使.NET能够对处置进行一些控制。我已经在SP2010中进行了多线程工作,但它是一头猪,并且有很多“未计划的功能”。

当时我确实与Microsoft打开过支持电话,他们的回答是应该可以但不支持。

相关问题