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()调用Class1. 仅仅因为您启动了一个新线程并不意味着您已经创建了一个新Class1对象。

于 2013-07-22T18:45:18.610 回答