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
,它工作得很好。SendHttpContext.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/"));