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