async public Task <Datum[]> GetGifsAsync(GifType type, string keyword)
        {
            var client = _factory.CreateClient("Giphy");

            GiphyResponse       giphyRequest = null;
            HttpResponseMessage response     = await client.GetAsync($"gifs/search?api_key={Constants.GIPHY_API_KEY}&limit={Constants.GIPHY_MAX_ELEMENTS}&q={keyword}");

            if (response.IsSuccessStatusCode)
            {
                giphyRequest = await response.Content.ReadAsAsync <GiphyResponse>();
            }
            return(giphyRequest?.data);
        }
        public async Task <Datum[]> GetGifsAsync(GifType type)
        {
            var client = _factory.CreateClient("Giphy");

            GiphyResponse       giphyRequest = null;
            HttpResponseMessage response;

            if (type == GifType.Gif)
            {
                response = await client.GetAsync($"gifs/trending?api_key={Constants.GIPHY_API_KEY}&limit={Constants.GIPHY_MAX_ELEMENTS}");
            }
            else
            {
                response = await client.GetAsync($"stickers/trending?api_key={Constants.GIPHY_API_KEY}&limit={Constants.GIPHY_MAX_ELEMENTS}");
            }

            if (response.IsSuccessStatusCode)
            {
                giphyRequest = await response.Content.ReadAsAsync <GiphyResponse>();
            }

            return(giphyRequest?.data);
        }
        /// <summary>
        /// 注意鼠标会穿透,需要父窗体拦截点击事件
        /// <summary>
        public static void AnimatingWait(WaitAction waitAct, Control parent, GifType type = GifType.Default, bool isInMainThread = false, bool isSame = true, string content = "")
        {
            // 避免1秒内重复触发
            if (isSame && (DateTime.Now.Ticks - CurrentTimeTick) < 10000000)
            {
                return;
            }
            CurrentTimeTick = DateTime.Now.Ticks;
            WaitForm        form         = null;
            AnimateWaitForm animateImage = null;
            bool            isFinish     = false;

            //Gif动画展示
            Thread drawThread = new Thread(() =>
            {
                form = new WaitForm(parent, isInMainThread);
                Point drawPoint;
                Image _image;
                switch (type)
                {
                case GifType.Default:
                    _image = FishyuSelfControl.Properties.Resources.Spinner;
                    break;

                case GifType.Reload:
                    _image = FishyuSelfControl.Properties.Resources.Reload;
                    break;

                case GifType.LongSpin:
                    _image = FishyuSelfControl.Properties.Resources.LongSpin;
                    break;

                case GifType.OriginRotation:
                    _image = FishyuSelfControl.Properties.Resources.OriginRotation;
                    break;

                case GifType.OriginSizeRotation:
                    _image = FishyuSelfControl.Properties.Resources.OriginSizeRotation;
                    break;

                case GifType.StripLoading:
                    _image = FishyuSelfControl.Properties.Resources.StripLoading;
                    break;

                default:
                    _image = FishyuSelfControl.Properties.Resources.Reload;
                    break;
                }
                animateImage = new AnimateWaitForm(_image);

                drawPoint   = new Point((form.Width - _image.Width) / 2, (form.Height - _image.Height) / 2);
                form.Paint += ((obj, e) =>
                {
                    Graphics g = e.Graphics;
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    g.PixelOffsetMode = PixelOffsetMode.Default; //高像素偏移质量
                    g.CompositingQuality = CompositingQuality.HighQuality;
                    //InterpolationMode不能使用High或者HighQualityBicubic,如果是灰色或者部分浅色的图像是会在边缘处出一白色透明的线
                    //用HighQualityBilinear却会使图片比其他两种模式模糊(需要肉眼仔细对比才可以看出)
                    g.InterpolationMode = InterpolationMode.Default;
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                    lock (animateImage.image)
                    {
                        try
                        {
                            g.DrawImage(animateImage.Image, drawPoint);
                        }
                        catch (Exception)
                        {
                        }
                        //g.DrawString()
                    }
                    //try
                    //{
                    //    g.DrawImage(animateImage.Image, drawPoint);
                    //}
                    //catch (Exception)
                    //{
                    //}
                });
                animateImage.Location       = form.Location;
                animateImage.Rect           = new Rectangle(animateImage.Location, new Size(_image.Width, _image.Height));
                animateImage.OnFrameChanged = ((image, evg) =>
                {
                    try
                    {
                        form.Invalidate(new Rectangle(drawPoint, new Size(_image.Width, _image.Height)));
                    }
                    catch (Exception)
                    {
                    }
                    //form.Invalidate();
                });

                //lock (_obj)
                //{

                //}
                if (form != null && !form.IsDisposed && !isFinish)
                {
                    animateImage.Play();
                    form.Focus();
                    form.ShowDialog();
                    //isOnShow = true;
                }
            });

            drawThread.IsBackground = true;
            drawThread.Start();


            //如果选择主线程阻塞
            if (isInMainThread)
            {
                waitAct();
                isFinish = true;
                CloseForm(animateImage, form);
            }
            else
            {
                Thread thread = new Thread(() =>
                {
                    waitAct();
                    isFinish = true;
                    CloseForm(animateImage, form);
                });
                thread.IsBackground = true;
                thread.Start();
            }
        }