Когда я отлаживаю эту небольшую программу шаг за шагом с помощью кнопки F10, программа рациональна, пока не достигнет уровня timer.Elapsed +=
. после этого предполагается, что позвоните по моему методу Check(MyConn)
, но это не так! он возвращается к MyConn.Close();
, и он отскакивает между этими двумя, затем он внезапно закрывает программу!Методы и таймер в C#
Мне было интересно, откуда эта проблема возникает ... не может быть из этой строки: 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"
}
Пара вещей - в чем исключение? и что делает 'Check' с объектом' MyConn'? Поскольку вы немедленно закрываете соединение * до *, у таймера есть шанс его использовать. – James