Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单独线程上类内的类属性_C#_Multithreading - Fatal编程技术网

C# 单独线程上类内的类属性

C# 单独线程上类内的类属性,c#,multithreading,C#,Multithreading,我有一个host类,它在一个新线程上启动另一个类的实例,如下所示: 我正在引用这篇MSDN文章,根据这篇文章,Class2.P1不应该为null。 链接: 我遗漏了什么明显的东西吗 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleA

我有一个host类,它在一个新线程上启动另一个类的实例,如下所示:

我正在引用这篇MSDN文章,根据这篇文章,Class2.P1不应该为null。 链接:

我遗漏了什么明显的东西吗

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            new Host().DoWork();
        }
    }
    public class Host {

      Class2Parent c = new Class2();
      Thread t;
      public void DoWork() {
      c.P1 = new Class3();
      t = new Thread(c.Start);
      t.Start();
      }
    }

    public class Class2Parent {
      public Class3 P1 = null;
        public virtual void Start() {}
    }

   public class Class2 : Class2Parent {
       public Class3 P1 = null;          
       public override void Start() {
      Console.WriteLine(P1 == null); // this is always true
      } 
   }   

   public class Class3 
   {}
}

您可以尝试使用计时器变量创建新线程,如下所示:

private Timer m_RequestTimer;

public void Begin()
{
            // Timer check
            if (m_RequestTimer != null)
            {
                m_RequestTimer.Change(Timeout.Infinite, Timeout.Infinite);
                m_RequestTimer.Dispose();
                m_RequestTimer = null;
            }
m_RequestTimer = new System.Threading.Timer(obj => { c.Start(); }, null, 250, System.Threading.Timeout.Infinite);
        }
}
其中m_RequestTimer是类host的一个属性,并开始host的一个方法


我希望它能帮助你=)

我不知道你是否遗漏了什么,但是你的宿主类缺少了方法。你的实际代码是什么?你根本没有启动线程t。你没有启动线程。非常抱歉,代码太复杂了。我刚刚纠正了它。线程肯定正在启动,但引用属性P1仍然为空。这仍然不是真正的代码-它不会编译!你怎么知道P1是空的?这和问题有什么关系?在他最初的帖子中,线程没有启动,所以我给他展示了一种启动线程的方法。