我試圖System.Threading.Timer在一定秒數后使用 a 退出程式,但在特定情況下它會失敗。我已經把它歸結為一個最小的測驗用例。
using System;
using System.Collections.Generic;
using System.Threading;
class test {
static void SetTimer() {
new Timer(a => Environment.Exit(0), null, 1000L, 0L);
}
static void Main(string[] args) {
SetTimer();
for (;;) {
var v = new List<int>();
}
}
}
上面的程式應該在一秒鐘后退出,但它只是無限期地掛起。
但上述代碼的每一部分都是必要的。定時器必須在單獨的函式中設定;如果直接在 Main 中設定,則程式在一秒鐘后退出。無限回圈必須做一些不平凡的事情;如果它只是增加一個整數變數,程式在一秒鐘后退出。
這不是 C# 編譯器本身的錯誤。F# 中的等效代碼的行為方式相同。
這適用于 Windows 10 上的 Visual Studio 2022,并且csc -version是4.1.0-5.22109.6 (0c82c411).
這是一個 .Net 錯誤,還是我做錯了什么?
uj5u.com熱心網友回復:
問題是您的新計時器在執行回呼之前已經消失了。您應該在保留物件的類中添加一個靜態 Timer 計時器,以便它可以繼續執行。這是我的答案:
using System;
using System.Collections.Generic;
using System.Threading;
class test
{
static Timer timer;
static void SetTimer()
{
timer = new Timer(a =>
{
Environment.Exit(0);
}, null, 1000L, 1000L);
}
static void Main(string[] args)
{
SetTimer();
for (; ; )
{
var v = new List<int>();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442031.html
