我正在使用此代码每隔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退出,并且将不再运行。
感谢您的帮助!
答案 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();
}
}
希望这有帮助。