C# 定時關窗 & 跨執行緒操作視窗
阿新 • • 發佈:2018-12-16
新增定時器
直接在程式碼中new一個定時器並繫結回撥函式即可
跨執行緒關閉其他視窗
會報異常:
解決方法: 在你要操作的視窗的類的建構函式中指明允許跨執行緒操作。
public partial class AlarmInfoWindow : Form { public AlarmInfoWindow() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; //允許跨執行緒操作此視窗 } 此處略去不可告人的一千行……
例程:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EzHostCtrl { public partial class AlarmInfoWindow : Form { public AlarmInfoWindow() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; //允許跨執行緒操作此視窗 } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void clearnAlarm_Button_Click(object sender, EventArgs e) { MessageBox.Show("報警已清除"); } /* 自己新增的,用於向listBOX中新增項 */ public void listBox1_addItem(String str) { this.AlarmList_listBox.Items.Add(str); } } }
知道你想複製抄襲,重要部分程式碼:
public AlarmInfoWindow alarmWindow; private void tspbtn_ErrorReport_Click(object sender, EventArgs e) { alarmWindow = new AlarmInfoWindow(); alarmWindow.listBox1_addItem("DFDG"); alarmWindow.Show(); /*建立定時器*/ System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Interval = 5000; aTimer.Elapsed += ATimer_Elapsed_AlarmWindDead; //定時時間到的時候的回撥函式 aTimer.AutoReset = false;//這裡填否,不然會反覆執行回撥函式 aTimer.Enabled = true; //啟動定時器 } /* 定時器回撥函式 */ private void ATimer_Elapsed_AlarmWindDead(object sender, System.Timers.ElapsedEventArgs e) { alarmWindow.Close(); }