Outils pour utilisateurs

Outils du site


lang:csharp:ihm:commun

Ceci est une ancienne révision du document !


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();

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);
 
// 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 peut-être aussi sous
// Windows Vista sans Service Pack.
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);
}

Source, Archive

lang/csharp/ihm/commun.1481233921.txt.gz · Dernière modification : 2016/12/08 22:52 de root