この小さなプログラムを F10 キーで段階的にデバッグすると、プログラムはレベル に達するまで合理的ですtimer.Elapsed +=
。この後、私のメソッドを呼び出すことになってCheck(MyConn)
いますが、そうではありません! に戻りMyConn.Close();
、これら 2 つの間を行き来し、突然プログラムを閉じます。
私は問題がどこから来たのか疑問に思っていました...それはこの行から来るのでしょうか: timer.Elapsed += (timerSender, timerEvent) => timer_Elapsed(timerSender, timerEvent, MyConn);
? MyConn
これは、私が議論したい場合に備えて、このフォーラムに投稿された解決策でしたtimer_Elapsed
...
よろしくお願いします。
static void Main(string[] args)
{
// create connection
string ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\mike\\Documents\\Database1.mdb;";
OleDbConnection MyConn = new OleDbConnection(ConnStr);
MyConn.Open();
initTimer(MyConn);
MyConn.Close();
}
static void initTimer(OleDbConnection MyConn)
{
//set up a timer
Timer timer = new Timer();
timer.Interval = 2000; // check every 2s (2000ms) if the values in the database changed
timer.Enabled = true; //enable the timer, so when the timer elapses after 2s, it performs some calculations
timer.Elapsed += (timerSender, timerEvent) => timer_Elapsed(timerSender, timerEvent, MyConn);
}
static void timer_Elapsed(object sender, ElapsedEventArgs e, OleDbConnection MyConn)
{
Check(MyConn); // Check is a method I have in my program which takes as argument "MyConn"
}