在WPF界面开发的时候,经常会遇到在ViewModel层多线程更新的问题。我在想,是否能够写一个统一的任务调度,保证同一个界面使用一个线程,所有业务逻辑处理都交给调度中心,类似框架给我们提供的Dispatcher,只不过Dispatcher是UI线程的调度。我们之间上代码。
先定义一个接口,IWorkDispatcher,包含几个方法,异步执行,同步执行
public interface IWorkDispatcher
{
/// <summary>
/// 异步执行方法,
/// </summary>
/// <param name="pluginId">必须确保同一个界面pluginId相同,否则会导致同界面线程不安全</param>
/// <param name="method"></param>
void BeginInvoke(int pluginId, Action method);
/// <summary>
/// 执行方法,
/// </summary>
/// <param name="pluginId">必须确保同一个界面pluginId相同,否则会导致同界面线程不安全</param>
/// <param name="method"></param>
void Invoke(int pluginId, Action method);
/// <summary>
/// 执行方法,
/// </summary>
/// <param name="pluginId">必须确保同一个界面pluginId相同,否则会导致同界面线程不安全</param>
/// <param name="method"></param>
/// <param name="timeOut">超时时间(毫秒),-1表示无限期等待</param>
/// <returns></returns>
bool Invoke(int pluginId, Action method, int timeOut);
}
定义一个操作类。
class WrokOperation
{
internal WrokOperation(Action method)
{
if (method == null)
{
throw new ArgumentNullException("method");
}
_method = method;