У меня есть класс animateMyWindow для изменения непрозрачности открытого окна с помощью таймера.C# Timer thread crash, BeginInvoke
namespace POCentury
{
class animateMyWindow
{
Timer _timer1 = new Timer();
Window _openedWindow = null;
public void animationTimerStart(object openedWindow)
{
if (openedWindow == null)
{
throw new Exception("Hata");
}
else
{
_openedWindow = (Window)openedWindow;
_timer1.Interval = 1 * 25;
_timer1.Elapsed += new ElapsedEventHandler(animationStart);
_timer1.AutoReset = true;
_timer1.Enabled = true;
_timer1.Start();
}
}
private void animationStart(object sender, ElapsedEventArgs e)
{
if (_openedWindow.Opacity == 1)
animationStop();
else
_openedWindow.Opacity += .1;
}
private void animationStop()
{
_timer1.Stop();
}
}
}
animationStart не может попасть в мое окно, потому что оно работает с другим потоком. Я пробовал Dispatcher.BeginInvoke и не могу заставить его работать. Можете ли вы помочь мне в этом?
Если это WPF вы должны проверить http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial Есть некоторые хорошие инструменты анимации внутри WPF –
Вы бы избежать необходимо использовать Диспетчер, если вы будете использовать [DispatcherTimer] (http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx). Еще проще было бы полностью удалить материал таймера и оживить непрозрачность с помощью [DoubleAnimation] (http://msdn.microsoft.com/en-us/library/system.windows.media.animation.doubleanimation.aspx). – Clemens
Спасибо @ Clemens, теперь он работает с DispatcherTimer. – cKNet