Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

NOHEAD

Expression Blend 3 и таймер

Рекомендуемые сообщения

Приветствую всех.

Делаю небольшое 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", то она работает чётко.

 

Почему так, кто может объяснить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

брейкпоинт в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем решение найдено.

Класс 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();

	}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты