Skip to main content
 首页 » 编程设计

c#之是否可以在 Web 部件中使用多线程访问 SharePoint 2010 列表

2024年01月12日28jackei

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

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

请您参考如下方法:

我认为在线程中使用 Dispose 可能是个问题。尝试将 SPSite 调用包装在 using 语句中,让 .net 重新获得对处理的一些控制权。我在 SP2010 中使用了多线程,但它是一头 pig ,并且有很多“计划外的功能”。

当时我确实接到了 Microsoft 的支持电话,他们的回答是应该可以,但不受支持。