Win7及以上系统支持任务栏进度条,为有进度类应用显示进度于任务栏,甚为方便。

以c#之WinForm实现其,大多采用Windows API Code Pack这个方案,加多引用,比较繁琐,而我总也打不开了其页面。

鄙人不喜欢多引用东西,即寻求方法抽取其相关代码,简化其应用。费些工夫,实现效果。

一、TaskbarManager

此为抽取必要代码而组成同名类,全部代码如下:

//抽取TaskBar代码,用其设置任务栏进度部分
//Copyright (c) Microsoft Corporation. All rights reserved. using System;
using System.Diagnostics;
using System.Runtime.InteropServices; namespace wApp
{
/// <summary>
/// Represents an instance of the Windows taskbar
/// </summary>
public class TaskbarManager
{
// Hide the default constructor
private TaskbarManager()
{
} // Best practice recommends defining a private object to lock on
private static object _syncLock = new object(); private static TaskbarManager _instance;
/// <summary>
/// Represents an instance of the Windows Taskbar
/// </summary>
public static TaskbarManager Instance
{
get
{
if (_instance == null)
{
lock (_syncLock)
{
if (_instance == null)
_instance = new TaskbarManager();
}
} return _instance;
}
} /// <summary>
/// Indicates whether this feature is supported on the current platform.
/// </summary>
public static bool IsPlatformSupported
{
get { return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.CompareTo(new Version(, )) >= ; }
} /// <summary>
/// Displays or updates a progress bar hosted in a taskbar button of the main application window
/// to show the specific percentage completed of the full operation.
/// </summary>
/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>
/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>
public void SetProgressValue(int currentValue, int maximumValue)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressValue(
OwnerHandle,
Convert.ToUInt32(currentValue),
Convert.ToUInt32(maximumValue));
} /// <summary>
/// Displays or updates a progress bar hosted in a taskbar button of the given window handle
/// to show the specific percentage completed of the full operation.
/// </summary>
/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator.
/// This window belong to a calling process associated with the button's application and must be already loaded.</param>
/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>
/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>
public void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressValue(
windowHandle,
Convert.ToUInt32(currentValue),
Convert.ToUInt32(maximumValue));
} /// <summary>
/// Sets the type and state of the progress indicator displayed on a taskbar button of the main application window.
/// </summary>
/// <param name="state">Progress state of the progress button</param>
public void SetProgressState(TaskbarProgressBarState state)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressState(OwnerHandle, (TaskbarProgressBarStatus)state);
} /// <summary>
/// Sets the type and state of the progress indicator displayed on a taskbar button
/// of the given window handle
/// </summary>
/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator.
/// This window belong to a calling process associated with the button's application and must be already loaded.</param>
/// <param name="state">Progress state of the progress button</param>
public void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressState(windowHandle, (TaskbarProgressBarStatus)state);
} private IntPtr _ownerHandle;
/// <summary>
/// Sets the handle of the window whose taskbar button will be used
/// to display progress.
/// </summary>
internal IntPtr OwnerHandle
{
get
{
if (_ownerHandle == IntPtr.Zero)
{
Process currentProcess = Process.GetCurrentProcess(); if (currentProcess != null && currentProcess.MainWindowHandle != IntPtr.Zero)
_ownerHandle = currentProcess.MainWindowHandle;
} return _ownerHandle;
}
}
} /// <summary>
/// Represents the thumbnail progress bar state.
/// </summary>
public enum TaskbarProgressBarState
{
/// <summary>
/// No progress is displayed.
/// </summary>
NoProgress = , /// <summary>
/// The progress is indeterminate (marquee).
/// </summary>
Indeterminate = 0x1, /// <summary>
/// Normal progress is displayed.
/// </summary>
Normal = 0x2, /// <summary>
/// An error occurred (red).
/// </summary>
Error = 0x4, /// <summary>
/// The operation is paused (yellow).
/// </summary>
Paused = 0x8
} /// <summary>
/// Provides internal access to the functions provided by the ITaskbarList4 interface,
/// without being forced to refer to it through another singleton.
/// </summary>
internal static class TaskbarList
{
private static object _syncLock = new object(); private static ITaskbarList4 _taskbarList;
internal static ITaskbarList4 Instance
{
get
{
if (_taskbarList == null)
{
lock (_syncLock)
{
if (_taskbarList == null)
{
_taskbarList = (ITaskbarList4)new CTaskbarList();
_taskbarList.HrInit();
}
}
} return _taskbarList;
}
}
} [GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute()]
internal class CTaskbarList { } [ComImportAttribute()]
[GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ITaskbarList4
{
// 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, TaskbarProgressBarStatus tbpFlags);
[PreserveSig]
void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);
[PreserveSig]
void UnregisterTab(IntPtr hwndTab);
[PreserveSig]
void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore);
[PreserveSig]
void SetTabActive(IntPtr hwndTab, IntPtr hwndInsertBefore, uint dwReserved);
[PreserveSig]
HResult ThumbBarAddButtons(
IntPtr hwnd,
uint cButtons,
[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);
[PreserveSig]
HResult ThumbBarUpdateButtons(
IntPtr hwnd,
uint cButtons,
[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);
[PreserveSig]
void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);
[PreserveSig]
void SetOverlayIcon(
IntPtr hwnd,
IntPtr hIcon,
[MarshalAs(UnmanagedType.LPWStr)] string pszDescription);
[PreserveSig]
void SetThumbnailTooltip(
IntPtr hwnd,
[MarshalAs(UnmanagedType.LPWStr)] string pszTip);
[PreserveSig]
void SetThumbnailClip(
IntPtr hwnd,
IntPtr prcClip); // ITaskbarList4
void SetTabProperties(IntPtr hwndTab, SetTabPropertiesOption stpFlags);
} internal enum TaskbarProgressBarStatus
{
NoProgress = ,
Indeterminate = 0x1,
Normal = 0x2,
Error = 0x4,
Paused = 0x8
} internal enum ThumbButtonMask
{
Bitmap = 0x1,
Icon = 0x2,
Tooltip = 0x4,
THB_FLAGS = 0x8
} [Flags]
internal enum ThumbButtonOptions
{
Enabled = 0x00000000,
Disabled = 0x00000001,
DismissOnClick = 0x00000002,
NoBackground = 0x00000004,
Hidden = 0x00000008,
NonInteractive = 0x00000010
} internal enum SetTabPropertiesOption
{
None = 0x0,
UseAppThumbnailAlways = 0x1,
UseAppThumbnailWhenActive = 0x2,
UseAppPeekAlways = 0x4,
UseAppPeekWhenActive = 0x8
} [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal struct ThumbButton
{
/// <summary>
/// WPARAM value for a THUMBBUTTON being clicked.
/// </summary>
internal const int Clicked = 0x1800; [MarshalAs(UnmanagedType.U4)]
internal ThumbButtonMask Mask;
internal uint Id;
internal uint Bitmap;
internal IntPtr Icon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]
internal string Tip;
[MarshalAs(UnmanagedType.U4)]
internal ThumbButtonOptions Flags;
} /// <summary>
/// HRESULT Wrapper
/// </summary>
public enum HResult
{
/// <summary>
/// S_OK
/// </summary>
Ok = 0x0000, /// <summary>
/// S_FALSE
/// </summary>
False = 0x0001, /// <summary>
/// E_INVALIDARG
/// </summary>
InvalidArguments = unchecked((int)0x80070057), /// <summary>
/// E_OUTOFMEMORY
/// </summary>
OutOfMemory = unchecked((int)0x8007000E), /// <summary>
/// E_NOINTERFACE
/// </summary>
NoInterface = unchecked((int)0x80004002), /// <summary>
/// E_FAIL
/// </summary>
Fail = unchecked((int)0x80004005), /// <summary>
/// E_ELEMENTNOTFOUND
/// </summary>
ElementNotFound = unchecked((int)0x80070490), /// <summary>
/// TYPE_E_ELEMENTNOTFOUND
/// </summary>
TypeElementNotFound = unchecked((int)0x8002802B), /// <summary>
/// NO_OBJECT
/// </summary>
NoObject = unchecked((int)0x800401E5), /// <summary>
/// Win32 Error code: ERROR_CANCELLED
/// </summary>
Win32ErrorCanceled = , /// <summary>
/// ERROR_CANCELLED
/// </summary>
Canceled = unchecked((int)0x800704C7), /// <summary>
/// The requested resource is in use
/// </summary>
ResourceInUse = unchecked((int)0x800700AA), /// <summary>
/// The requested resources is read-only.
/// </summary>
AccessDenied = unchecked((int)0x80030005)
}
}

静态类实现方法(推荐使用这个):

using System;
using System.Diagnostics;
using System.Runtime.InteropServices; namespace wApp
{
/// <summary>
/// Represents an instance of the Windows taskbar
/// </summary>
public static class TaskbarManager
{
/// <summary>
/// Sets the handle of the window whose taskbar button will be used
/// to display progress.
/// </summary>
private static IntPtr ownerHandle = IntPtr.Zero; static TaskbarManager()
{
var currentProcess = Process.GetCurrentProcess();
if (currentProcess != null && currentProcess.MainWindowHandle != IntPtr.Zero)
ownerHandle = currentProcess.MainWindowHandle;
} /// <summary>
/// Indicates whether this feature is supported on the current platform.
/// </summary>
private static bool IsPlatformSupported
{
get { return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.CompareTo(new Version(, )) >= ; }
} /// <summary>
/// Displays or updates a progress bar hosted in a taskbar button of the main application window
/// to show the specific percentage completed of the full operation.
/// </summary>
/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>
/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>
public static void SetProgressValue(int currentValue, int maximumValue)
{
if (IsPlatformSupported && ownerHandle != IntPtr.Zero)
TaskbarList.Instance.SetProgressValue(
ownerHandle,
Convert.ToUInt32(currentValue),
Convert.ToUInt32(maximumValue));
} /// <summary>
/// Displays or updates a progress bar hosted in a taskbar button of the given window handle
/// to show the specific percentage completed of the full operation.
/// </summary>
/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator.
/// This window belong to a calling process associated with the button's application and must be already loaded.</param>
/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>
/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>
public static void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressValue(
windowHandle,
Convert.ToUInt32(currentValue),
Convert.ToUInt32(maximumValue));
} /// <summary>
/// Sets the type and state of the progress indicator displayed on a taskbar button of the main application window.
/// </summary>
/// <param name="state">Progress state of the progress button</param>
public static void SetProgressState(TaskbarProgressBarState state)
{
if (IsPlatformSupported && ownerHandle != IntPtr.Zero)
TaskbarList.Instance.SetProgressState(ownerHandle, (TaskbarProgressBarStatus)state);
} /// <summary>
/// Sets the type and state of the progress indicator displayed on a taskbar button
/// of the given window handle
/// </summary>
/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator.
/// This window belong to a calling process associated with the button's application and must be already loaded.</param>
/// <param name="state">Progress state of the progress button</param>
public static void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle)
{
if (IsPlatformSupported)
TaskbarList.Instance.SetProgressState(windowHandle, (TaskbarProgressBarStatus)state);
}
} /// <summary>
/// Represents the thumbnail progress bar state.
/// </summary>
public enum TaskbarProgressBarState
{
/// <summary>
/// No progress is displayed.
/// </summary>
NoProgress = , /// <summary>
/// The progress is indeterminate (marquee).
/// </summary>
Indeterminate = 0x1, /// <summary>
/// Normal progress is displayed.
/// </summary>
Normal = 0x2, /// <summary>
/// An error occurred (red).
/// </summary>
Error = 0x4, /// <summary>
/// The operation is paused (yellow).
/// </summary>
Paused = 0x8
} /// <summary>
/// Provides internal access to the functions provided by the ITaskbarList4 interface,
/// without being forced to refer to it through another singleton.
/// </summary>
internal static class TaskbarList
{
private static object _syncLock = new object(); private static ITaskbarList4 _taskbarList;
internal static ITaskbarList4 Instance
{
get
{
if (_taskbarList == null)
{
lock (_syncLock)
{
if (_taskbarList == null)
{
_taskbarList = (ITaskbarList4)new CTaskbarList();
_taskbarList.HrInit();
}
}
} return _taskbarList;
}
}
} [GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute()]
internal class CTaskbarList { } [ComImportAttribute()]
[GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ITaskbarList4
{
// 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, TaskbarProgressBarStatus tbpFlags);
[PreserveSig]
void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);
[PreserveSig]
void UnregisterTab(IntPtr hwndTab);
[PreserveSig]
void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore);
[PreserveSig]
void SetTabActive(IntPtr hwndTab, IntPtr hwndInsertBefore, uint dwReserved);
[PreserveSig]
HResult ThumbBarAddButtons(
IntPtr hwnd,
uint cButtons,
[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);
[PreserveSig]
HResult ThumbBarUpdateButtons(
IntPtr hwnd,
uint cButtons,
[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);
[PreserveSig]
void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);
[PreserveSig]
void SetOverlayIcon(
IntPtr hwnd,
IntPtr hIcon,
[MarshalAs(UnmanagedType.LPWStr)] string pszDescription);
[PreserveSig]
void SetThumbnailTooltip(
IntPtr hwnd,
[MarshalAs(UnmanagedType.LPWStr)] string pszTip);
[PreserveSig]
void SetThumbnailClip(
IntPtr hwnd,
IntPtr prcClip); // ITaskbarList4
void SetTabProperties(IntPtr hwndTab, SetTabPropertiesOption stpFlags);
} internal enum TaskbarProgressBarStatus
{
NoProgress = ,
Indeterminate = 0x1,
Normal = 0x2,
Error = 0x4,
Paused = 0x8
} internal enum ThumbButtonMask
{
Bitmap = 0x1,
Icon = 0x2,
Tooltip = 0x4,
THB_FLAGS = 0x8
} [Flags]
internal enum ThumbButtonOptions
{
Enabled = 0x00000000,
Disabled = 0x00000001,
DismissOnClick = 0x00000002,
NoBackground = 0x00000004,
Hidden = 0x00000008,
NonInteractive = 0x00000010
} internal enum SetTabPropertiesOption
{
None = 0x0,
UseAppThumbnailAlways = 0x1,
UseAppThumbnailWhenActive = 0x2,
UseAppPeekAlways = 0x4,
UseAppPeekWhenActive = 0x8
} [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal struct ThumbButton
{
/// <summary>
/// WPARAM value for a THUMBBUTTON being clicked.
/// </summary>
internal const int Clicked = 0x1800; [MarshalAs(UnmanagedType.U4)]
internal ThumbButtonMask Mask;
internal uint Id;
internal uint Bitmap;
internal IntPtr Icon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]
internal string Tip;
[MarshalAs(UnmanagedType.U4)]
internal ThumbButtonOptions Flags;
} /// <summary>
/// HRESULT Wrapper
/// </summary>
public enum HResult
{
/// <summary>
/// S_OK
/// </summary>
Ok = 0x0000, /// <summary>
/// S_FALSE
/// </summary>
False = 0x0001, /// <summary>
/// E_INVALIDARG
/// </summary>
InvalidArguments = unchecked((int)0x80070057), /// <summary>
/// E_OUTOFMEMORY
/// </summary>
OutOfMemory = unchecked((int)0x8007000E), /// <summary>
/// E_NOINTERFACE
/// </summary>
NoInterface = unchecked((int)0x80004002), /// <summary>
/// E_FAIL
/// </summary>
Fail = unchecked((int)0x80004005), /// <summary>
/// E_ELEMENTNOTFOUND
/// </summary>
ElementNotFound = unchecked((int)0x80070490), /// <summary>
/// TYPE_E_ELEMENTNOTFOUND
/// </summary>
TypeElementNotFound = unchecked((int)0x8002802B), /// <summary>
/// NO_OBJECT
/// </summary>
NoObject = unchecked((int)0x800401E5), /// <summary>
/// Win32 Error code: ERROR_CANCELLED
/// </summary>
Win32ErrorCanceled = , /// <summary>
/// ERROR_CANCELLED
/// </summary>
Canceled = unchecked((int)0x800704C7), /// <summary>
/// The requested resource is in use
/// </summary>
ResourceInUse = unchecked((int)0x800700AA), /// <summary>
/// The requested resources is read-only.
/// </summary>
AccessDenied = unchecked((int)0x80030005)
}
}

二、使用方法

它有一静态公用变量Instance,直引用即可;或以静态类直接引用,而不再加以.Instance。以引用静态类为例:

        private void trackBar_ValueChanged(object sender, EventArgs e)
{
TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);
} private void btnNoProgress_Click(object sender, EventArgs e)
{
TaskbarManager.SetProgressState(TaskbarProgressBarState.NoProgress);
} private void btnIndeterminate_Click(object sender, EventArgs e)
{
TaskbarManager.SetProgressState(TaskbarProgressBarState.Indeterminate);
} private void btnNormal_Click(object sender, EventArgs e)
{
TaskbarManager.SetProgressState(TaskbarProgressBarState.Normal);
TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);
} private void btn_Click(object sender, EventArgs e)
{
TaskbarManager.SetProgressState(TaskbarProgressBarState.Error);
TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);
} private void btnPaused_Click(object sender, EventArgs e)
{
TaskbarManager.SetProgressState(TaskbarProgressBarState.Paused);
TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);
}

三、效果如下图示:

参考资料:

Windows 7 progress bar in taskbar in C#? - Stack Overflow

dbarros/WindowsAPICodePack: A fork of the Windows API Code Pack with additional fixes and features by yours truly.

c#: 任务栏进度显示(TaskbarManager)的更多相关文章

  1. Qt创建任务栏进度条

    一.正文 任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度.下载任务的进度).如下: 在Qt中使用任务栏进度条也是非常容易的一件事情.Qt ...

  2. TaskBarProgress(任务栏进度条)

    原文:TaskBarProgress(任务栏进度条) </Grid> { { InitializeComponent(); Loaded += } { BackgroundWorker w ...

  3. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

  4. Retrofit2文件上传下载及其进度显示

    序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multip ...

  5. [cocos2d]场景切换以及切换进度显示

    本文主要分两个部分叙述,第一是场景切换,第二是场景切换的进度显示. 一.场景切换 参考learn-iphone-and-ipad-cocos2d-game-development 第五章内容 coco ...

  6. Python多线程同步命令行模拟进度显示

    最近在一个Python(3.5)的小项目中需要用到多线程加快处理速度,同时需要显示进度,于是查了些资料找到几个实现方法:线程池的map-reduce和Queue结合线程的实现.这里简单的实例介绍一下Q ...

  7. nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

    ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : . ...

  8. 超赞的CSS3进度条 可以随进度显示不同颜色

    原文:超赞的CSS3进度条 可以随进度显示不同颜色 现在的WEB已经不是以前的WEB了,传输更大的数据量,有着更加复杂的计算,这就需要利用进度条来提高用户体验,必要时可以让用户耐心等待,不至于因操作卡 ...

  9. WPF中任务栏只显示主窗口

    我们在用WPF开发的时候,常常会遇到在主窗口打开的情况下,去显示子窗口,而此时任务栏同时显示主窗口与子窗口.这样看起来很不美观.所以在弹出子窗口之前,设置它的几个相应属性,便不会出现这种问题了. // ...

随机推荐

  1. 使外部主机可访问Django服务

    欲让外部主机可访问Django的服务器,需使用如下命令开启服务 python manage.py runserver 0.0.0.0:8000

  2. 一个nginx服务器配置多站点

    有时候你想在一台服务器上为不同的域名运行不同的站点.比如www.siteA.com作为博客,www.siteB.com作为论坛.你可以把两个域名的IP都解析到你的服务器上,但是没法在Nginx的根目录 ...

  3. js跳转 -- 转

    第一种: 复制代码代码如下: <script language="javascript" type="text/javascript"> windo ...

  4. html动态元素点击事件添加

    很多时候,页面的元素是后期异步动态添加在页面上.页面点击事件无效. 非动态的元素直接$().click();便可以直接触发点击事件,而动态元素需要事先注册事件. $(document).on('cli ...

  5. 常用HDFS操作命令

    前一段时间频繁使用HDFS,又收集到了一些命令,在这儿分享出来,大数据的框架及设计原理方面的理论文章暂时还没有时间总结,后面有时间逐渐整理发出来. 注:在使用命令时,可以使用 hadoop fs,如果 ...

  6. 【转】java面试题

    http://blog.csdn.net/jackfrued/article/details/44921941   Java面试题转

  7. windows下安装Scrapy框架

    一 首先我们通过pycharm安装: 发现不行,会报错. 二 通过命令行再次进行安装: 发现还是会报错: 更新下pip,继续安装,发现还是不行,那怎么办呢? 继续安装Scrapy发下还是不行: 那么我 ...

  8. Spring------生命周期

    Spring------生命周期 转:https://blog.csdn.net/qq_42112846/article/details/81368862 如图所示: 一下就是对上图的解释: Spri ...

  9. How can I manage the modules for python2 when python3 installed as well. In OSX

    ref: https://stackoverflow.com/questions/53385448/how-can-i-manage-the-modules-for-python2-when-pyth ...

  10. final关键字特点

    一.final关键字修饰的类 无法被继承(即不能有子类) 二.final关键字修饰的方法不能被重写 三.final关键字修饰的变量成为常量(即不允许被修改) 开发中经常使用