1

開いているウィンドウの不透明度をタイマーで変更する「animateMyWindow」クラスがあります。

    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 を試しましたが、機能しません。それを手伝ってくれませんか?

4

1 に答える 1

0

基本的に、別のスレッドで発生しているため、イベントopenedWindow内にアクセスすることはできません。animationStartそのためには Dispatcher が必要です。

Dispatcher.BeginInvoke(new Action(() =>
{
        if (_openedWindow.Opacity == 1)
                animationStop();
            else
                _openedWindow.Opacity += .1;
}));
于 2013-09-19T13:55:06.380 に答える