C# 在线程中获取目录时发生对象引用错误

C# 在线程中获取目录时发生对象引用错误,c#,threadpool,.net,C#,Threadpool,.net,大家好,我正在尝试访问我的线程中的文件夹,如下所示 protected string GetFolderName(int OrgID) { string FolderName = string.Empty; string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/")); if (strDirectories.Length > 0

大家好,我正在尝试访问我的线程中的文件夹,如下所示

protected string GetFolderName(int OrgID)
{
    string FolderName = string.Empty;
    string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/"));
    if (strDirectories.Length > 0)
    {
        for (int count = 0; count < strDirectories.Length; count++)
        {
            string name = strDirectories[count].Substring(strDirectories[count].LastIndexOf("\\") + 1);
            if (name.Contains("_"))
            {
                string companyId = name.Substring(name.LastIndexOf("_") + 1);
                if (Convert.ToInt32(companyId) == OrgID)
                {
                    FolderName = name;
                    break;
                }
            }
        }
    }
    return FolderName;
}
请帮帮我


解决方案


我使用了
HttpRuntime.AppDomainAppPath
来代替
HttpContext.Current.Server.MapPath
,它工作得很好。

Send
HttpContext.Current.Server.MapPath(“~/Uploads/”)
作为
QueueUserWorkItem
中的最后一个参数,返回执行线程中的当前上下文。线程池线程不负责任何HTTP请求,因此它没有上下文。
Current
属性将返回null,这就是您获得异常的原因。我建议您在转移到线程池之前调用
Directory.GetDirectories()
。另一种方法是传递上下文


编辑:如果不想在线程池线程中执行
Directory.GetDirectories()
,至少可以在原始线程中计算
HttpContext.Current.Server.MapPath(“~/Uploads/”)
,并使其可用于线程池。基本上,您只想避免在错误的线程上计算
HttpContext.Current

感谢回复@Jon Skeet,但在传输到线程池之前,我不能使用Directory.GetDirectories(),因为我必须在它们和file.move等其他操作中执行一些功能also@rahul:为什么?我觉得这不是个好理由。毕竟,这基本上是你在线程池线程中做的第一件事——那么为什么不事先做呢?实际上,这只是线程池的一部分,原始代码太长,无法粘贴here@rahul:如果你以前能解释一下的话,那会很有帮助的。好的,另一种选择是在原始线程中计算
HttpContext.Current.Server.MapPath(“~/Uploads/”)
,并将其传递给线程池线程。我将编辑我的帖子。是的,我现在正在做同样的事情,我正在使用这个HttpRuntime.AppDomainAppPath代替Server.MapPath。感谢您的支持
string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/"));