ppc下开发。窗口login 里有个进度条,想在类1中调用这个进度条
public delegate void dgpross(int dq,int max);//定义委托
 public static void pross(int d, int z)
        {
            login fg = new login();
            if (fg.InvokeRequired)
            {
                fg.Invoke(new dgpross(pross), new object[] { d, z });
           
            }
            else
            {
                fg.pBar1.Minimum = 0;
                fg.pBar1.Maximum = z;
                if (fg.pBar1.Value <= fg.pBar1.Maximum)
                {
                    fg.pBar1.Value = d;                }
            }
        }
类1 中a是socket当前接收到的字节数,调用委托:if (a < 100)
    {
      login.dgpross d1 =new login.dgpross(login.pross);
      d1(a, 100);
     }现在进度条没有反映!大家帮我看看哪里出问题了。

解决方案 »

  1.   

    终于看懂了...
    if (fg.InvokeRequired)
    {
    fg.Invoke(new dgpross(pross), new object[] { d, z });}
    不要这么写
    单独写个函数
    fg.pBar1.Minimum = 0;
    fg.pBar1.Maximum = z;
    if (fg.pBar1.Value <= fg.pBar1.Maximum)
    {
    fg.pBar1.Value = d;}
    -----------
    然后在写个调用他的Invokelogin fg = new login();
    if (fg.InvokeRequired)
    {
    fg.Invoke(new dgpross(pross), new object[] { d, z });}统一调用Invoke
    see
    http://blog.csdn.net/red_angelx/archive/2006/10/27/1353325.aspx
      

  2.   

    fg.Invoke(new dgpross(pross), new object[] { d, z });断点跟踪一下,条件成立不,
    sleep一下下呢,我找找以前写的东东去,
      

  3.   

    public static void pross(int d, int z)
    {
        login fg = new login(); //这句是不是有问题,每次都new出一个来
        ..........
    }
      

  4.   

    login fg = new login();
    个人感觉这句话有问题.这个fg是new的,是一个新的对象.不是已经打开的那个.而你操作的是它,不会有反应.
      

  5.   

    楼主这样写,login的实例根本没有显示,在pross函数里面加个fg.show().试试。
    另外,每次调用这个委托的时候,都会生成login的一个新实例,试这将login的实例作为参数传递试试。
      

  6.   

    up up 抬起头 up up 扭一扭
      

  7.   

    好久没弄C#的委托了,也不记得怎么弄了,现在转j2ee了,帮D哈...
      

  8.   

    我觉得应该是每次窗体都new出一个新的来。
    简单测试一下就知道了。
    login fg = new login();
    fg.Show();
    还有,这个public static void pross(int d, int z)真的有必要存在吗?
    我似乎理解你应用的目的,但真的不理解你编程的思想………………
      

  9.   

    cf 只支持事件方式的委托就是 参数必须是这样的 (object sender, EventArgs e)
      

  10.   

    1.你的调用是fg.invoke``委托函数一直在UI线程中运行`估计是这个原因``试试直接调用委托``或开子线程
    2.委托函数没有return``加return试试
    3.调用是否有循环
    4.d1(a, 100)``a为字节数``是否越界``>100了?水平有限``能想到的就这些``
      

  11.   

    if (fg.InvokeRequired)
                {
                    fg.Invoke(new dgpross(pross), new object[] { d, z });
               
                }
    反射是不是有问题
      

  12.   

    没有见过这样写的!!
    为什么要让Procss做两件事呢?
    把它们分开来做成两个方法!
      

  13.   

    名字乱七八糟,代码稀里糊涂,我就看见一个无限递归调用:
    fg.Invoke(new dgpross(pross), new object[] { d, z });
    你这里可是调用本身?