using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Serein.Library.Utils
{
///
/// 为类库提供了在UI线程上下文操作的方法,如果你在Windows平台上运行,不必手动实例化该类
///
public class UIContextOperation
{
private readonly SynchronizationContext context;
///
/// 传入UI线程上下文
///
/// 线程上下文
public UIContextOperation(SynchronizationContext synchronizationContext)
{
this.context = synchronizationContext;
}
///
/// 同步方式进行调用方法
///
/// 要执行的UI操作
public void Invoke(Action uiAction)
{
context?.Post(state =>
{
uiAction?.Invoke();
}, null);
}
///
/// 异步方式进行调用
///
/// 要执行的UI操作
///
public Task InvokeAsync(Action uiAction)
{
var tcs = new TaskCompletionSource();
context?.Post(state =>
{
try
{
uiAction?.Invoke();
tcs.SetResult(true);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
return tcs.Task;
}
}
}