You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.8 KiB
C#
125 lines
3.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace POSV.Utils
|
|
{
|
|
public class BackgroundDoWorkEventArgs
|
|
{
|
|
public object Parameter { get; set; }
|
|
public BackgroundWorker BackgroundWorker { get; set; }
|
|
}
|
|
|
|
public static class BackgroundWorkerExtension
|
|
{
|
|
/// <summary>
|
|
/// 构造BackgroundWorker对象
|
|
/// </summary>
|
|
/// <param name="doWorkEvent">待处理的事件</param>
|
|
/// <param name="progressChangedEvent">通知事件</param>
|
|
/// <param name="runWorkerCompletedEvent">结束事件</param>
|
|
/// <returns></returns>
|
|
public static BackgroundWorker InitNewBackgroundWorker(DoWorkEventHandler doWorkEvent = null, ProgressChangedEventHandler progressChangedEvent = null, RunWorkerCompletedEventHandler runWorkerCompletedEvent = null)
|
|
{
|
|
var bw = new BackgroundWorker();
|
|
bw.RegisterDoWork(doWorkEvent);
|
|
bw.RegisterProgressChanged(progressChangedEvent);
|
|
bw.RegisterRunWorkerCompleted(runWorkerCompletedEvent);
|
|
return bw;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行BackgroundWorker
|
|
/// </summary>
|
|
/// <param name="bw"></param>
|
|
/// <param name="param"></param>
|
|
public static void RunWorkerAsyncExt(this BackgroundWorker bw, object param = null)
|
|
{
|
|
//只有在BackgroundWorker空闲的时候才执行
|
|
if (!bw.IsBusy)
|
|
{
|
|
bw.RunWorkerAsync(new BackgroundDoWorkEventArgs
|
|
{
|
|
Parameter = param,
|
|
BackgroundWorker = bw
|
|
});
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 取消BackgroundWorker的执行
|
|
/// </summary>
|
|
/// <param name="bw"></param>
|
|
public static void CancelAsyncExt(this BackgroundWorker bw)
|
|
{
|
|
bw.CancelAsync();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 注册DoWork事件
|
|
/// </summary>
|
|
/// <param name="bw"></param>
|
|
/// <param name="doWorkEvent"></param>
|
|
public static void RegisterDoWork(this BackgroundWorker bw, DoWorkEventHandler doWorkEvent = null)
|
|
{
|
|
bw.WorkerSupportsCancellation = true;
|
|
|
|
//默认实现
|
|
if (doWorkEvent == null)
|
|
{
|
|
doWorkEvent = (sender, e) =>
|
|
{
|
|
|
|
};
|
|
|
|
}
|
|
|
|
bw.DoWork += doWorkEvent;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册ProgressChanged事件
|
|
/// </summary>
|
|
/// <param name="bw"></param>
|
|
/// <param name="progressChangedEvent"></param>
|
|
public static void RegisterProgressChanged(this BackgroundWorker bw, ProgressChangedEventHandler progressChangedEvent = null)
|
|
{
|
|
bw.WorkerReportsProgress = true;
|
|
|
|
//默认实现
|
|
if (progressChangedEvent == null)
|
|
{
|
|
progressChangedEvent = (sender, e) =>
|
|
{
|
|
|
|
};
|
|
}
|
|
|
|
bw.ProgressChanged += progressChangedEvent;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册RunWorkerCompleted事件
|
|
/// </summary>
|
|
/// <param name="bw"></param>
|
|
/// <param name="runWorkerCompletedEvent"></param>
|
|
public static void RegisterRunWorkerCompleted(this BackgroundWorker bw, RunWorkerCompletedEventHandler runWorkerCompletedEvent = null)
|
|
{
|
|
|
|
if (runWorkerCompletedEvent == null)
|
|
{
|
|
runWorkerCompletedEvent = (sender, e) =>
|
|
{
|
|
|
|
};
|
|
}
|
|
|
|
bw.RunWorkerCompleted += runWorkerCompletedEvent;
|
|
}
|
|
}
|
|
}
|