0

メソッドがスレッドで実行されるとき。メソッドを呼び出す前に、そのメソッドを含むクラスの(デフォルト/パラメーター化された)コンストラクターも呼び出しますか。

public class Class1
{
    HttpContext h = null;
    public Class1(HttpContext _h)
    {
        h = _h;
    }
    public Class1()
    {
        if (h != null)
        {
            HttpContext.Current = h;
        }
    }
    ManualResetEvent[] wsManualResetEvents = new ManualResetEvent[1];

    public void callThread()
    {
        HttpContext.Current.Session["ok"] = "ll";
        wsManualResetEvents[0] = new ManualResetEvent(false);
        ThreadPool.QueueUserWorkItem(new WaitCallback(o => me()));
        if (wsManualResetEvents != null && wsManualResetEvents[0] != null)
        {
            WaitHandle.WaitAll(wsManualResetEvents);
        }
    }
    private void me()
    {
        var d = HttpContext.Current.Session["ok"].ToString();
        wsManualResetEvents[0].set();
    }
}

私がやろうとしているのは、実行中のスレッドと同等のスレッドの httpcontext を設定することです。

4

1 に答える 1

2

いいえ、スレッドを開始してもコンストラクターは呼び出されません。コードの場合、 のインスタンスがClass1あり、それを呼び出し.callThread()ています。がme()バックグラウンド スレッドで呼び出されるとme()、 の同じインスタンスで呼び出されますClass1Class1新しいスレッドを開始したからといって、新しいオブジェクトを作成したとは限りません。

于 2013-07-22T18:45:18.610 に答える