小弟给意大利一家公司的国内研发中心做了一个软件,用C#写的,采用的是盗版的vs2003中文版,在自己机子上和他们国内的研发中心(安装的是win2000英文版)运行完全正常,但是到意大利那边当打开某个Form时,对话框就被挂起了没有反应了。
我看了看这个对话框与其他的区别可能就是其他线程需要调用该Form的一些方法,我采用的是
if( InvokeRequired == false ) 
   DoSome();
else
    Invoke( new DoSomeInvoker(DoSome), new object[] {value} );
的方式。
请问那位高手能给小弟指点一二,不胜感激

解决方案 »

  1.   

    不应该啊,What language are they using in 意大利? 把你的测试机器换成意大利语?
      

  2.   

    to  sunjian_qi:能举个例子吗?有什么情况下会导致在不同的国家出现问题to  saucer(思归):我们这边都是中文或者英文的win2000,意大利那边应该是意大利语,会不会是跟dotnetfx的版本有关?(意大利那边没有装vs2003,就装了一下dotnetfx和可执行文件)
      

  3.   

    you are not doing a good job, you are supposed to test on a machine which matches the production machine environment
      

  4.   

    你上面给出的这段if else是在其它方法中,需要更新Form中的UI控件是吧?改一下:if( InvokeRequired == false ) 
       DoSome();
    else
    { //用异步委托
      //举个例子
      ShowDelegate showText = new ShowDelegate(Show);
      this.BeginInvoke(showText, new object[]{ ... }); //...代表Show方法参数
    }
      

  5.   

    to  iGray(C#Online) ,是的,需要更新
      

  6.   

    还有一个需要指出的是,因为别的线程需要处理一些UI方面的东西,需要在该form线程中创建新的form(否则,新的界面不能位于该form的顶部,可能跑到后面去了),所以我采用这样的方式
    public delegate void DoQueueDialogInvoker(Form form);
    DialogResult _dialogResult=DialogResult.Cancel;
    public DialogResult ShowDialog(Form form)
    {
         _dialogResult=DialogResult.Cancel;
         if( InvokeRequired == false ) 
         {
              DoShowDialog(form);
         }
         else
              Invoke( new DoQueueDialogInvoker(DoShowDialog), new object[] {form} );
         return _dialogResult;
    }
    private void DoShowDialog(Form form)
    {
         _dialogResult=form.ShowDialog();
          return ;
    }
    这样在不同的系统下会不会有问题
      

  7.   

    win2000需不需要安装sp2才能保证正常运行
      

  8.   

    在某些情况下是会出现在SP2下不能正常运行的。建议打上SP4。还有,在上面,思归建议得很好:你应该在国内搭一台与意大利(即客户),所使用的机器环境完全一模一样的平台,然后把你的程序在那上面做测试,只有在那上面测试完全成功了,才能说这个程序写好了。
    否则很多错误你靠经验来猜测是很难的,但一调试你可能马上就知道是错在什么地方了。
      

  9.   

    要打开的窗体挂起后,能不能打开其它窗体呢?
    一 你是不是把里面的异常使用了try和catch,但没有throw出来?如果这样,可能就是在打开新窗体发生了异常,但是没有运行完毕就发生错误,但被你隐藏了起来;
    二 死循环?
      

  10.   

    有没有安装或是装了比你本本底的 .Net Framework
      

  11.   

    我倒觉得这应该给我们自己编写程序的时候做充分的异常管理比方说建个线程监视其它线程,来回报BUG
      

  12.   

    if( InvokeRequired == false ) 这个变量保持原子性么?PS:用不用问问他怎么操作的?会不会是种你没料到的方式 ^_^
      

  13.   

    现在问题搞清楚了,谢谢大家是因为dotnetfx版本的问题,我们这边用的是vs2003中文版自带的,可能是中文版,意大利他们从网上下载的,有点不兼容不知道国内有没有vs2003英文版盗版卖