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
{
///
/// 构造BackgroundWorker对象
///
/// 待处理的事件
/// 通知事件
/// 结束事件
///
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;
}
///
/// 执行BackgroundWorker
///
///
///
public static void RunWorkerAsyncExt(this BackgroundWorker bw, object param = null)
{
//只有在BackgroundWorker空闲的时候才执行
if (!bw.IsBusy)
{
bw.RunWorkerAsync(new BackgroundDoWorkEventArgs
{
Parameter = param,
BackgroundWorker = bw
});
}
}
///
/// 取消BackgroundWorker的执行
///
///
public static void CancelAsyncExt(this BackgroundWorker bw)
{
bw.CancelAsync();
}
///
/// 注册DoWork事件
///
///
///
public static void RegisterDoWork(this BackgroundWorker bw, DoWorkEventHandler doWorkEvent = null)
{
bw.WorkerSupportsCancellation = true;
//默认实现
if (doWorkEvent == null)
{
doWorkEvent = (sender, e) =>
{
};
}
bw.DoWork += doWorkEvent;
}
///
/// 注册ProgressChanged事件
///
///
///
public static void RegisterProgressChanged(this BackgroundWorker bw, ProgressChangedEventHandler progressChangedEvent = null)
{
bw.WorkerReportsProgress = true;
//默认实现
if (progressChangedEvent == null)
{
progressChangedEvent = (sender, e) =>
{
};
}
bw.ProgressChanged += progressChangedEvent;
}
///
/// 注册RunWorkerCompleted事件
///
///
///
public static void RegisterRunWorkerCompleted(this BackgroundWorker bw, RunWorkerCompletedEventHandler runWorkerCompletedEvent = null)
{
if (runWorkerCompletedEvent == null)
{
runWorkerCompletedEvent = (sender, e) =>
{
};
}
bw.RunWorkerCompleted += runWorkerCompletedEvent;
}
}
}