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);
}
}
{
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);
}
}

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;
}
}
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;
}
}
