public void query()
        {
            if (this.IsHandleCreated)
            {
                this.Invoke(new Action(() =>
                {
                    button1.Enabled = false;
                    button1.Text = "查询中..";
                    label3.Text = "";
                    //pictureBox1.Visible = true;
                    //xf.Show();
                }));
                //Thread.Sleep(1000);
.
.
.
.

解决方案 »

  1.   

    gif尺寸记得改成合适大小 ,不然的话会显示一部分,而且那部分可能就是你看不见的部分..
      

  2.   

    定义        //程序加载时使用线程方式执行某些耗时较长的操作
            ThreadStart TSOpen;
            Thread TOpen;       private void FrmMain_Load(object sender, EventArgs e)
            {
               //显示图片,提醒用户等待
               picShow.Top = (this.Height - mnuMain.Height - picShow.Height) / 2;
               picShow.Left = (this.Width - picShow.Width) / 2;           //使用线程方式执行其他操作(用于执行时耗时较长的操作,使用线程方式执行,同时显示进度条动画)
               TSOpen = new ThreadStart(MethodOpen);
               TOpen = new Thread(TSOpen);
               TOpen.Name = "Open";
               TOpen.Start();
            }        private void MethodOpen()
            {
                try
                {
                  //某些耗时较长的操作
                  
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.Message);
                }
                finally
                {
                   //执行完毕后图片消失
                    HidePic();            }
            }
            private delegate void UpdatePic();
            public void HidePic()
            {
                if (InvokeRequired)
                {
                    //在执行此对象的主线程上执行委托。
                    //System.IAsyncResult BeginInvoke(System.Delegate method, object[] args) args: 作为给定方法的参数传递的 System.Object 类型数组。如果不需要参数,则可以为 null。 
                    //method: 对方法的 System.Delegate,采用 args 中包含的相同数字和类型的参数。
                    BeginInvoke(new UpdatePic(HidePic), null);
                    return;
                }            //执行完毕后图片消失
                this.picShow.Hide();
            }
    原址:
    http://bbs.csdn.net/topics/190037571
      

  3.   


    可是,这样做,我查询数据那部分代码放在哪里 捏?而且我什么时候隐藏GIF图片捏?
      

  4.   


    可是,这样做,我查询数据那部分代码放在哪里 捏?而且我什么时候隐藏GIF图片捏?就在这个子线程里边  我给你我这个子线程的源码吧  谁说不能放一起啊.我这个就是查询的啊
    private void button1_Click(object sender, EventArgs e)
            {
                Thread tt = new Thread(new ThreadStart(query));
                tt.Start();
            }
            DataTable dt = new DataTable();
            public void query()
            {
                if (this.IsHandleCreated)
                {
                    this.Invoke(new Action(() =>
                    {
                        button1.Enabled = false;
                        button1.Text = "查询中..";
                        label3.Text = "";
                        //pictureBox1.Visible = true;
                        //xf.Show();
                    }));
                    //Thread.Sleep(1000);
                    if (textBox1.Text.ToString() == "" && textBox2.Text.ToString() == "")
                    {
                        this.Invoke(new Action(() =>
                        {
                            //MessageBox.Show("查询条件至少填写一个");
                            label3.Text = "条件不全!";
                            lblchange();
                            textBox1.Focus();
                            //xf.Hide();
                            //pictureBox1.Visible = false;
                            button1.Enabled = true;
                            button1.Text = "查询";
                        }));
                        return;
                    }
                    string sql = "select a.name as 宝贝名称,a.id as 宝贝ID,a.number as 条码,a.memberprice as 小也价,a.ischanged as 是否正常1,b.shortname as 链接 from web_product a,Web_Category b where a.categoryid=b.id ";
                    if (textBox1.Text.ToString() != "") sql += " and a.name like '%" + textBox1.Text.ToString() + "%' ";
                    if (textBox2.Text.ToString() != "") sql += " and a.number = '" + textBox2.Text.ToString() + "' ";
                    dt = SqlHelper.ExecuteDataTable1(sql).Tables[0];
                    //dt.Columns["是否正常"].DataType = Type.GetType("System.String");
                    dt.Columns.Add("是否正常");
                    if (dt.Rows.Count > 0)
                    {
                        //循环设置链接
                        for (int k = 0; k < dt.Rows.Count; k++)
                        {
                            if (dt.Rows[k]["是否正常1"].ToString() == "1")
                            {
                                dt.Rows[k]["是否正常"] = "是";
                            }
                            else
                            {
                                dt.Rows[k]["是否正常"] = "否";
                            }
                            dt.Rows[k]["链接"] = @"http://www.xiaoye.com/c-" + dt.Rows[k]["链接"].ToString() + "/p" + dt.Rows[k]["宝贝ID"].ToString() + ".html";
                        }
                        dt.Columns.Remove("是否正常1");
                        this.Invoke(new Action(() =>
                        {
                            dataGridView1.DataSource = dt;
                        }));
                    }
                    else
                    {
                        this.Invoke(new Action(() =>
                        {
                            label3.Text = "无相关产品";
                            lblchange();
                            dt = null;
                            dataGridView1.DataSource = dt;
                        }));
                    }
                    this.Invoke(new Action(() =>
                    {
                        button1.Enabled = true;
                        button1.Text = "查询";
                        pictureBox1.Visible = false;
                        //xf.Hide();
                    }));
                }
            }
      

  5.   


    可是,这样做,我查询数据那部分代码放在哪里 捏?而且我什么时候隐藏GIF图片捏?就在这个子线程里边  我给你我这个子线程的源码吧  谁说不能放一起啊.我这个就是查询的啊
    private void button1_Click(object sender, EventArgs e)
            {
                Thread tt = new Thread(new ThreadStart(query));
                tt.Start();
            }
            DataTable dt = new DataTable();
            public void query()
            {
                if (this.IsHandleCreated)
                {
                    this.Invoke(new Action(() =>
                    {
                        button1.Enabled = false;
                        button1.Text = "查询中..";
                        label3.Text = "";
                        //pictureBox1.Visible = true;
                        //xf.Show();
                    }));
                    //Thread.Sleep(1000);
                    if (textBox1.Text.ToString() == "" && textBox2.Text.ToString() == "")
                    {
                        this.Invoke(new Action(() =>
                        {
                            //MessageBox.Show("查询条件至少填写一个");
                            label3.Text = "条件不全!";
                            lblchange();
                            textBox1.Focus();
                            //xf.Hide();
                            //pictureBox1.Visible = false;
                            button1.Enabled = true;
                            button1.Text = "查询";
                        }));
                        return;
                    }
                    string sql = "select a.name as 宝贝名称,a.id as 宝贝ID,a.number as 条码,a.memberprice as 小也价,a.ischanged as 是否正常1,b.shortname as 链接 from web_product a,Web_Category b where a.categoryid=b.id ";
                    if (textBox1.Text.ToString() != "") sql += " and a.name like '%" + textBox1.Text.ToString() + "%' ";
                    if (textBox2.Text.ToString() != "") sql += " and a.number = '" + textBox2.Text.ToString() + "' ";
                    dt = SqlHelper.ExecuteDataTable1(sql).Tables[0];
                    //dt.Columns["是否正常"].DataType = Type.GetType("System.String");
                    dt.Columns.Add("是否正常");
                    if (dt.Rows.Count > 0)
                    {
                        //循环设置链接
                        for (int k = 0; k < dt.Rows.Count; k++)
                        {
                            if (dt.Rows[k]["是否正常1"].ToString() == "1")
                            {
                                dt.Rows[k]["是否正常"] = "是";
                            }
                            else
                            {
                                dt.Rows[k]["是否正常"] = "否";
                            }
                            dt.Rows[k]["链接"] = @"http://www.xiaoye.com/c-" + dt.Rows[k]["链接"].ToString() + "/p" + dt.Rows[k]["宝贝ID"].ToString() + ".html";
                        }
                        dt.Columns.Remove("是否正常1");
                        this.Invoke(new Action(() =>
                        {
                            dataGridView1.DataSource = dt;
                        }));
                    }
                    else
                    {
                        this.Invoke(new Action(() =>
                        {
                            label3.Text = "无相关产品";
                            lblchange();
                            dt = null;
                            dataGridView1.DataSource = dt;
                        }));
                    }
                    this.Invoke(new Action(() =>
                    {
                        button1.Enabled = true;
                        button1.Text = "查询";
                        pictureBox1.Visible = false;
                        //xf.Hide();
                    }));
                }
            }这个是最简单的查询的了 其中有几个方法调用的你可以忽略掉
      

  6.   


    大哥,那个显示是没问题,但问题是GIF不会动。
      

  7.   


    还有哦,大哥,为什么第一次点击的时候,不会显示GIF图片捏?以后点击,也是有时有,有时没有的
      

  8.   


    大哥,那个显示是没问题,但问题是GIF不会动。你的GIF 图片能动了吗?
      

  9.   

    利用缓冲区输出图像
    protected void Page_Load(object sender, EventArgs e)
        {
            //将 ContentType 属性设置为 image/jpeg,以便将整个页呈现为一幅 JPEG 图像
            //调用 Clear 方法来确保不会将无关的内容(包括标头)与此响应一同发送
            Response.ContentType = "image/jpeg";
            Response.Clear();
            
            // 该代码将 BufferOutput 属性设置为 true,从而使该页在完全处理之后再发送到请求客户端
            Response.BufferOutput = true;
                 //创建两个用于绘制矩形的对象,即 Bitmap 和 Graphics 对象。在该页中创建的变量将作为绘制矩形的坐标和在最大的矩形中显示的字符串
            Font rectangleFont = new Font( "Arial", 10, FontStyle.Bold); // Create a font style.
            int height = 100; // Create integer variables.
            int width = 200;
            Random r = new Random(); // Create a random number generator and create variable values based on it.
            int x = r.Next(75);
            int a = r.Next(155);
            int x1 = r.Next(100);
            Bitmap bmp = new Bitmap(  width, height, PixelFormat.Format24bppRgb);  
            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.Clear(Color.LightGray);
            //在绘制三个矩形和其中显示的字符串
            g.DrawRectangle(Pens.White, 1, 1, width - 3, height - 3); // Use the Graphics object to draw three rectangles.
            g.DrawRectangle(Pens.Aquamarine, 2, 2, width - 3, height - 3);
            g.DrawRectangle(Pens.Black, 0, 0, width, height);
            g.DrawString("ASP.NET 缓存区的应用", rectangleFont, SystemBrushes.WindowText, new PointF(10, 40));  
            g.FillRectangle( new SolidBrush( Color.FromArgb(a, 255, 128, 255)), x, 20, 100, 50);
            g.FillRectangle(
                new LinearGradientBrush(
                    new Point(x, 10),
                    new Point(x1 + 75, 50 + 30),
                    Color.FromArgb(128, 0, 0, 128),
                    Color.FromArgb(255, 255, 255, 240)),
                x1, 50, 75, 30);        //将Bitmap 保存到与 OutputStream 属性关联的 Stream 对象,并将其格式设置为 JPEG
            bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
            g.Dispose();
            bmp.Dispose();
            // 调用 Flush 方法将缓冲的响应发送到请求客户端
            Response.Flush();    }
      

  10.   


    大哥,那个显示是没问题,但问题是GIF不会动。你的GIF 图片能动了吗?还是不能动
      

  11.   


    还有哦,大哥,为什么第一次点击的时候,不会显示GIF图片捏?以后点击,也是有时有,有时没有的这个情况的话你得调试呀兄弟.应该是逻辑上有点错误了,我发给你的代码是完全没问题的呀 我一直在做
      

  12.   


    大哥,那个显示是没问题,但问题是GIF不会动。怎么会不动呢.......是你图的问题吗.?
      

  13.   

    UI操作必须放到UI线程里.
    你新建个线程是不能操作UI的.
      

  14.   

    还有,winform程序显示gif和webform是不一样的.
    webform显示图片跟你直接用图片查看器显示是一个效果,本身就会动
    而winform中仅仅将gif放到Picturebox里,就跟你用windows画图板打开gif是一个效果,是不会动的
    你需要做代码去刷新图片流.
    具体查找winform显示gif,网上有现成的代码.
      

  15.   


    还有哦,大哥,为什么第一次点击的时候,不会显示GIF图片捏?以后点击,也是有时有,有时没有的这个情况的话你得调试呀兄弟.应该是逻辑上有点错误了,我发给你的代码是完全没问题的呀 我一直在做
    嗯是的,兄弟~~我用你的代码,然后所有新生成的控件,都加上this.invoke();
    就可以了。。谢谢啊!!我给你分了,但是我第一次发帖耶,不知道结贴成功没,你看一下
      

  16.   


    还有哦,大哥,为什么第一次点击的时候,不会显示GIF图片捏?以后点击,也是有时有,有时没有的这个情况的话你得调试呀兄弟.应该是逻辑上有点错误了,我发给你的代码是完全没问题的呀 我一直在做
    嗯是的,兄弟~~我用你的代码,然后所有新生成的控件,都加上this.invoke();
    就可以了。。谢谢啊!!我给你分了,但是我第一次发帖耶,不知道结贴成功没,你看一下拿到分了已经,Z65443344兄弟,wimform也是一样的效果的呀,之前你也帮了我很多线程的问题,在这里也多谢你~