System.Threading.Timer将无法持续工作

时间:2016-04-17 12:47:41

标签: c#

我正在使用此代码每隔5秒检查一下我安装的程序(appwiz.cpl)和我的ipconfig。

我正在使用一个线程,因为我有一个GUI,它需要保持活动状态。

public void time() {
 var time = new System.Threading.Timer(x =>
 {
  conf();
  ncpa("ipconfig /all");
 }, null, 5000, Timeout.Infinite);
}

我在“ncpa”方法结束时回调,time();

它可以工作,但几分钟后线程将以代码259退出,并且将不再运行。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

首先,您使用了" Infinite"对于定期呼叫,这意味着它不会定期发出信号。此外,当在这样的变量中使用时间时,在你离开"时间"的范围之后,它会被GC收集。变量。尝试改变并制作"时间"变量类中的字段。

如果是它的实例字段,那么当对象本身不具有引用时,它将被认为没有引用。如果您将其设为静态字段,则将其视为根,并且只要您不手动更改引用,就会保留引用。

例如:

   class Program
{
    private static System.Threading.Timer _timer = new Timer(_ => Console.WriteLine("Hi"), 
        null, 1000, 1000);
    static void Main(string[] args)
    {
        Console.ReadLine();
    }
}

希望这有帮助。