Winform自動重啟
阿新 • • 發佈:2021-12-17
引言
由於交易所的伺服器通常會在結算時間內關閉,很多軟體都會通過重啟解決行情重連的問題。
以前直接通過看門狗對程式進行控制,最近使用迅投的時候發現他的自動重啟做的挺好,所以順便給歷史版本的winform程式新增類似功能。
簡單測試
public partial class Form1 : Form { delegate void FormControl(); // 新增委託代理 public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { DateTime restartTime = DateTime.Now.AddSeconds(10); Task.Run(async () => { while(DateTime.Now < restartTime) { await Task.Delay(1000 * 2); } restart(); }); button1.Enabled = false; } private void restart() { this.Invoke(new FormControl(async () => { button1.Enabled = true; await Task.Delay(1000 * 10); Application.Restart(); })); } }
按下按鈕之後,按鈕變為不可用,等待20秒之後,按鈕變為可用,等待10秒後實現重啟。
由於子執行緒中不能直接呼叫主執行緒中的物件,所以將Application.Restart()方法放在一個委託中呼叫。
後續改進
將上述思路改進,參考迅投的重啟配置,封裝成自定義控制元件,方便所有程式複用。