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#

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;
}
}
}