winform Invoke

   public static class ExtensionMethods
   {
   

    public static Task InvokeAsync(this Control ctrl, Action action)
    {
        return Task.Factory.FromAsync(ctrl.BeginInvoke(new Action(() =>
        {
            action?.Invoke();
        })), ctrl.EndInvoke);
    }
    public static Task InvokeAsync<T>(this Control ctrl, Action<T> action, T t)
    {
        return Task.Factory.FromAsync(ctrl.BeginInvoke(new Action<T>(c =>
        {
            action?.Invoke(c);
        }), t), ctrl.EndInvoke);
    }

    public static Task InvokeAsync<T>(this Control ctrl, Func<T> func)
    {
        return Task.Factory.FromAsync(ctrl.BeginInvoke(new Func<T>(() =>
        {
            return func.Invoke();
        })), ctrl.EndInvoke);
    }

  public static async Task InvokeAsync2(this Control ctrl, Action action)
    {
        if (ctrl.Disposing || ctrl.IsDisposed || !ctrl.IsHandleCreated)
            return;
        if (!ctrl.InvokeRequired)
        {
            action.Invoke();
            return;
        }
        await Task.Factory.FromAsync(ctrl.BeginInvoke(new Action(() =>
        {
            if (ctrl.Disposing || ctrl.IsDisposed || !ctrl.IsHandleCreated)
                return;
            action?.Invoke();
        })), ctrl.EndInvoke);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容