Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Timer para Dojo em C# + WPF


Fala galera, ontem o Rodrigo Vidal me pediu um timer para utilziar nos encontros de Dojo do .Net Architects RJ. Eu não tinha nenhum timer, estávamos usando meu celular nos Dojos aqui em SP.Timer para Dojo em C# e WPF

Em 10min. acabei fazendo algo bem simples, e o código não é dos melhores, mas é o que deu pra fazer em 10min.O projeto está no Codeplex http://dojotimer.codeplex.com/ , e podemos ir evoluindo conforme as necessidades. O XAML do timer está abaixo:

                Start            </button>

O código C# está aqui:

delegate void TimerDispatcherDelegate(int elapsed);

public partial class DojoTimerWindow : Window{    Timer timer = null;
int elapsed = 0;
int tempoTotal = 300;

public DojoTimerWindow()    {        InitializeComponent();
    }

private void Button_Click(object sender, RoutedEventArgs e)    {        DefaultValues();
    timer = new Timer((obj) =>            {                CalculateTime();
    }
, this.elapsed, 0, 1000);
    }

private void DefaultValues()    {        tempo.Text = string.Format("00:00");
    elapsed = 0;
    alarme.Stop();
    this.WindowState = System.Windows.WindowState.Minimized;
    }

private void CalculateTime()    {        this.Dispatcher.Invoke(new TimerDispatcherDelegate(tempoCorrido =>        {
if(tempoCorrido == tempoTotal)            {                alarme.Play();
    this.WindowState = System.Windows.WindowState.Maximized;
    this.Topmost = true;
    this.timer.Dispose();
    }
            else            {                PrintTime(tempoCorrido);
    }
        }
), this.elapsed++);
    }

private void PrintTime(int tempoCorrido)    {
var timeSpan = new TimeSpan(0, 0, (tempoCorrido > 60 ? tempoCorrido / 60 : 0), tempoCorrido % 60);
    tempo.Text = string.Format("{
}
:{
}
", (4 - timeSpan.Minutes).ToString("00"), (59 - timeSpan.Seconds).ToString("00"));
    }
}

Quando o timer é iniciado, ele é minimizado. Após os 5 minutos, ele é maximizado sobre todas as janelas, e então um som é disparado.Tá aí, quem quiser brincar: http://dojotimer.codeplex.com/

Voltar

Fork me on GitHub