NOHEAD Опубликовано 2 июня, 2010 Жалоба Share Опубликовано 2 июня, 2010 Приветствую всех. Делаю небольшое WPF приложение в Expression Blend 3. В окне есть объект Grid с именем "UpPanel" Вешаю на окно при MouseMove обработчик: C# private void mouseMove(object sender, System.Windows.Input.MouseEventArgs e) { UpPanel.Visibility=Visibility.Visible; myTimer.Elapsed += new ElapsedEventHandler( TimerStop ); myTimer.Interval=1000; myTimer.Enabled = true; myTimer.Start(); } public void TimerStop(object source, ElapsedEventArgs e) { UpPanel.Visibility=Visibility.Hidden; MessageBox.Show("StopTimer"); myTimer.Stop(); } В итоге при движении мышки включается таймер и после Одной Секунды должна пропадать UpPanel и выскакивать MessageBox. Но ничего не происходит. Но если я меняю местами строки в функции "TimerStop" и делаю так: C# public void TimerStop(object source, ElapsedEventArgs e) { MessageBox.Show("StopTimer"); UpPanel.Visibility=Visibility.Hidden; myTimer.Stop(); } то MessageBox выскакивает, а панель так и не пропадает, и ошибка не вылезает никакая. В итоге строка UpPanel.Visibility=Visibility.Hidden; (и всё что после неё) не срабатывает в функции TimerStop, но если её перенести в функцию "mouseMove", то она работает чётко. Почему так, кто может объяснить? Ссылка на комментарий Поделиться на другие сайты More sharing options...
NOHEAD Опубликовано 3 июня, 2010 Автор Жалоба Share Опубликовано 3 июня, 2010 брейкпоинт в Expression Blend 3 видимо не ставится, или я не нашёл как это делается. Там даже не трейсится в Output ничего, хотя должно работать: Trace.WriteLine("bla-bla-bla"); В общем странно, но в обработчике события Elapsed public void TimerStop(object source, ElapsedEventArgs e) { myTimer.Enabled=false; MessageBox.Show("Верхняя панель должна быть скрыта"); //Всё что ниже, не работает UpPanel.Visibility=Visibility.Hidden; UpPanel.Height=10; myTimer.Stop(); ChangeUpPanel(); } не работает ничего кроме MessageBox.Show("StopTimer"); и myTimer.Enabled=false; т.е. не вызываются свойства объектов почему то, хотя объекты определяются, проверено через MessageBox.Show(UpPanel.ToString()); выдаёт: System.Windows.Controls.Grid Ссылка на комментарий Поделиться на другие сайты More sharing options...
NOHEAD Опубликовано 3 июня, 2010 Автор Жалоба Share Опубликовано 3 июня, 2010 В общем решение найдено. Класс System.Timers.Timer тупит, ну или я чего то не понимаю. Помог другой таймер: System.Windows.Threading.DispatcherTimer; Вот пример: using System.Windows.Threading; public partial class MainWindow : Window { DispatcherTimer dispatcherTimer = new DispatcherTimer(); public MainWindow() { dispatcherTimer.Tick += new EventHandler(TimerStop); dispatcherTimer.Interval = new TimeSpan(0, 0, 5); dispatcherTimer.Start(); } private void TimerStop(object sender, EventArgs e) { //Тут уже работает всё что угодно, даже UpPanel.Visibility=Visibility.Hidden; dispatcherTimer.Stop(); } } Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.