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(this Control ctrl, Action action, T t)
    {
        return Task.Factory.FromAsync(ctrl.BeginInvoke(new Action(c =>
        {
            action?.Invoke(c);
        }), t), ctrl.EndInvoke);
    }

    public static Task InvokeAsync(this Control ctrl, Func func)
    {
        return Task.Factory.FromAsync(ctrl.BeginInvoke(new Func(() =>
        {
            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);
    }
}

你可能感兴趣的:(winform Invoke)