1

こんにちは、このようにスレッド内のフォルダーにアクセスしようとしています

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

このメソッドはスレッドプールを介して呼び出され、この行に「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます

string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/"));

私を助けてください


解決

HttpRuntime.AppDomainAppPath代わりに使用しましたがHttpContext.Current.Server.MapPath、完全に機能します。

4

2 に答える 2

2

HttpContext.Current実行中のスレッドの現在のコンテキストを返します。スレッド プール スレッドは HTTP 要求を処理しないため、コンテキストはありません。プロパティはCurrentnull を返すため、例外が発生します。スレッドプールに転送するDirectory.GetDirectories() 前に電話することをお勧めします。別の方法は、代わりにコンテキストを渡すことです。

EDIT:スレッドプールスレッドで実行したくない場合Directory.GetDirectories()は、少なくともHttpContext.Current.Server.MapPath("~/Uploads/")元のスレッドで評価し、それをスレッドプールで利用できるようにすることができます。HttpContext.Current基本的に、間違ったスレッドでの評価を避けたいだけです。

于 2012-09-29T08:39:18.703 に答える
1

HttpContext.Current.Server.MapPath("~/Uploads/")の最後のパラメータとして送信QueueUserWorkItem

于 2012-09-29T08:39:08.240 に答える