Site logo
Site logo
Programmieren aus Leidenschaft
Programmieren aus Leidenschaft

TaskDialog mit Timer


Es war für Entwickler schon immer ein Problem, dass sich der Inhalt eines Benachrichtigungsfenstern nicht anpassen lies und man von Klassen wie MessageBox nicht ableiten könnte. Benötigte man zusätzliche Elemente, wie vielleicht einen Fortschrittsbalken oder einen Countdown in einem Mitteilungsfenster, musste man selbst programmieren und ein von Grund auf eigenes und neues Fenster konstruieren. Mit dem neuen TaskDialog ist zumindest das jetzt nicht mehr nötig, denn durch einen eingebauten Timer können Events ausgelöst werden, mit denen dann auch der Inhalt des TaskDialog-Fensters selbst manipuliert werden kann. Es ist sogar möglich, dass sich das Fenster nach eine genau definierten Zeit selbstständig schliesst und dabei einen zuvor festgelegten TaskDialogResult zurückgibt. Es große Erleichterung für viele Routineaufgaben im Programmieralltag.
private void btnTaskDialogTimer_Click(object sender, RoutedEventArgs e)
{
        TaskDialog td = new TaskDialog();
        td.Icon = TaskDialogStandardIcon.Warning;
        td.Tick += new EventHandler<<span style="color:#217F9F;">TaskDialogTickEventArgs>(td_Tick);
        td.InstructionText = "";
        td.Icon = TaskDialogStandardIcon.Shield;
        td.Caption = "TaskDialog mit Timer";
        td.FooterText = "Bitte warten";
        td.Cancelable = true;
        td.Show();
}

void td_Tick(object sender, TaskDialogTickEventArgs e)
{
        TaskDialog td = sender as TaskDialog;
        int seconds = e.Ticks / 1000;
        td.InstructionText =
        string.Format("Vergangene Zeit: {0} Sekunden",seconds);

        if (seconds == 5)
        {
                td.Close(
                TaskDialogResult.Cancel);
        }
}
stacks_image_365797A9-7EF0-4666-A130-023321CFFF41
Möchte man im TaskDialog zusätzliche einen Fortschrittsbalken anzeigen, ist auch das mit geringem Aufwand möglich.
int maxValueTicks = 10000;

private void btnTaskDialogProgressTimer_Click(object sender, RoutedEventArgs e)
{
        TaskDialog tdprogress = new TaskDialog();
        tdprogress.Icon = TaskDialogStandardIcon.Information;
        tdprogress.FooterText = "Bitte warten";
        tdprogress.Caption = "TaskDialog mit Progress Bar";
        tdprogress.Tick +=
        new EventHandler<<span style="color:#217F9F;">TaskDialogTickEventArgs>(tdprogress_Tick);
        tdprogress.Cancelable = true;
        tdprogress.StandardButtons = TaskDialogStandardButtons.Cancel;
        TaskDialogProgressBar progressBar
        = new TaskDialogProgressBar(0, maxValueTicks, 0);
        tdprogress.ProgressBar = progressBar;
        tdprogress.Show();
}

void tdprogress_Tick(object sender, TaskDialogTickEventArgs e)
{
        TaskDialog td = sender as TaskDialog;
        if (maxValueTicks >= e.Ticks)
        {
                td.InstructionText =
                string.Format("Ticks: {0}", e.Ticks);
                td.ProgressBar.Value = e.Ticks;
        }
        else
        {
                td.InstructionText =
                "Vorgang abgeschlossen.";
                td.FooterText = "";
                td.ProgressBar.Value = maxValueTicks;
        }
}
stacks_image_B7AE01BE-BF4F-4C93-B835-DC801F44C2DE