Implementiert man als Entwickler eine WinForms-Anwendung, die einen langlaufenden Prozess beinhaltet (z.B. zum Import größerer Datenmengen), so stellt sich die Frage, wie der Abschluss des Prozesses dem Anwender bekannt gemacht wird.
Langlaufende Prozesse wird ein Anwender zwar initial anstoßen, dann aber zu anderen Aufgaben übergehen und die Anwendung in den Hintergrund verlagern. Daher ist es oftmals sinnvoll, den Abschluss des Prozesses durch “Blinken” des Anwendungssymbols in der Taskleiste deutlich zu machen.
Hier kommt man mit WinForms-Mitteln allein nicht aus und muss auf Win32-API-Funktionen zurückgreifen. Folgender Code realisiert z.B. ein dauerhaftes Blinken des Anwendungs-Icons in der Taskleiste, bis die Anwendung in den Vordergrund geholt wird:
1: public static class FlashWindowHelper
2: {
3: #region Helper Structures
4:
5: [StructLayout(LayoutKind.Sequential)]
6: private struct FLASHWINFO
7: {
8: public uint cbSize;
9: public IntPtr hwnd;
10: public uint dwFlags;
11: public uint uCount;
12: public uint dwTimeout;
13: }
14:
15: #endregion
16:
17: #region Win32 API Members
18:
19: [DllImport("user32.dll")]
20: [return:MarshalAs(UnmanagedType.Bool)]
21: private static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
22: public const uint FLASHW_ALL = 3;
23: public const uint FLASHW_TIMERNOFG = 12;
24:
25: #endregion
26:
27: #region Public Methods
28:
29: public static bool Flash(Form form)
30: {
31: // funktioniert nur unter Windows 2000 oder sp„ter
32: if (IsWin2000OrLater())
33: {
34: FLASHWINFO fi = Create_FLASHWINFO(form.Handle, FLASHW_ALL | FLASHW_TIMERNOFG, uint.MaxValue, 0);
35: return FlashWindowEx(ref fi);
36: }
37: return false;
38: }
39:
40: #endregion
41:
42: #region Private Helper Methods
43:
44: private static FLASHWINFO Create_FLASHWINFO(IntPtr handle, uint flags, uint count, uint timeout)
45: {
46: FLASHWINFO fi = new FLASHWINFO();
47: fi.cbSize = Convert.ToUInt32(Marshal.SizeOf(fi));
48: fi.hwnd = handle;
49: fi.dwFlags = flags;
50: fi.uCount = count;
51: fi.dwTimeout = timeout;
52: return fi;
53: }
54:
55: private static bool IsWin2000OrLater()
56: {
57: return Environment.OSVersion.Version.Major >= 5;
58: }
59:
60: #endregion
61: }
Auf diese Weise kann die gewünschte Funktionalität leicht implementiert werden. Die Grundstruktur dieser Klasse stammt von C#: Flash Window in Taskbar via Win32 FlashWindowEx
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen