当一个方法在线程中执行时.它还会调用(默认/参数化)构造函数吗

本文关键字:调用 默认 构造函数 参数 执行 一个 方法 线程 | 更新日期: 2023-09-27 18:24:13

在线程中执行方法时。在调用该方法之前,它是否还会调用包含该方法的类的(默认/参数化)构造函数。

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。

当一个方法在线程中执行时.它还会调用(默认/参数化)构造函数吗

否,启动线程不会调用构造函数。在您的代码中,您有一个Class1的实例,并且您正在对其调用.callThread()。当在后台线程上调用me()时,它正在对Class1的同一实例调用me()。启动一个新线程并不意味着创建了一个新的Class1对象。