lang:csharp:ihm:commun
Affiche un MessageBox sans bloquer la suite du process
Vive le thread tout simplement. Facilement adaptable à n'importe quelle autre action.
new Thread(new ThreadStart(delegate { MessageBox.Show("Je ne bloque pas.", "Titre", MessageBoxButtons.OK, MessageBoxIcon.Warning); } )).Start();
Pour forcer la MessageBox à rester au dessus de l'application, il faut ajouter le paramètre MB_TOPMOST
:
MessageBox.Show("Je ne bloque pas.", "Titre", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000);
messagebox on top of splashscreen Archive du 03/06/2014 le 26/04/2020
Barre de progression dans la barre des tâches
- TaskbarProgress.java
using System; using System.Runtime.InteropServices; public static class TaskbarProgress { public enum TaskbarStates { NoProgress = 0, Indeterminate = 0x1, Normal = 0x2, Error = 0x4, Paused = 0x8 } [ComImport()] [Guid("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] private interface ITaskbarList3 { // ITaskbarList [PreserveSig] void HrInit(); [PreserveSig] void AddTab(IntPtr hwnd); [PreserveSig] void DeleteTab(IntPtr hwnd); [PreserveSig] void ActivateTab(IntPtr hwnd); [PreserveSig] void SetActiveAlt(IntPtr hwnd); // ITaskbarList2 [PreserveSig] void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen); // ITaskbarList3 [PreserveSig] void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal); [PreserveSig] void SetProgressState(IntPtr hwnd, TaskbarStates state); } [Guid("56FDF344-FD6D-11d0-958A-006097C9A090")] [ClassInterface(ClassInterfaceType.None)] [ComImport()] private class TaskbarInstance { } private static ITaskbarList3 taskbarInstance = (ITaskbarList3)new TaskbarInstance(); public static void SetState(IntPtr windowHandle, TaskbarStates taskbarState) { taskbarInstance.SetProgressState(windowHandle, taskbarState); } public static void SetValue(IntPtr windowHandle, double progressValue, double progressMax) { taskbarInstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax); } }
et son utilisation
private static bool taskbarSupported = Environment.OSVersion.Version >= new Version(6, 1); if (taskbarSupported) { // Utilisation TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Normal); TaskbarProgress.SetValue(Handle, toolStripProgressBar1.Value, toolStripProgressBar1.Maximum); // Désactivation TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.NoProgress); }
Windows 7 progress bar in taskbar in C#? Archive du 18/08/2009 le 26/04/2020
Il n'est pas possible d'utiliser taskbarSupported
depuis la classe TaskbarProgress
(comme l'exemple de StackOverFlow
le fait).
Si un élément de cette classe est exécuté, le constructeur privé l'est aussi à cause de la variable static
, ce qui entraîne une exception de type TypeInitializationException
sous Windows XP et sous Windows Vista.
lang/csharp/ihm/commun.txt · Dernière modification : 2020/04/26 23:27 de root