C# 单独线程上类内的类属性
我有一个host类,它在一个新线程上启动另一个类的实例,如下所示: 我正在引用这篇MSDN文章,根据这篇文章,Class2.P1不应该为null。 链接: 我遗漏了什么明显的东西吗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
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是空的?这和问题有什么关系?在他最初的帖子中,线程没有启动,所以我给他展示了一种启动线程的方法。