这个问题是中断是另外开了一个线程,
public class form2
{
  onSerialDataReceived(object sender, SerialDataReceivedEventArgs e)
  {
   form1.getNum();
  }
}
Form1是一个窗体类。
有没有什么办法不用static Form1 form1;form1=new form1();
有没有方法可以不用static就可以调用form1.getNum()?????????

解决方案 »

  1.   

    方法写到Program中。例如
    public static Program
    {
        static void Main()
        {
            ...
        }    public static double GetNum(SerialPort sp)
        {
            //code here
        }
    }调用:
    Program.GetNum(sender as SerialPort);
      

  2.   

    跨线程需要同步
    目标窗体.Invoke(new Action(()=>你的代码));或是某个地方,例如启动窗体的时候执行一句:
    Control.CheckForIllegalCrossThreadCalls = false;
      

  3.   

    你这个我知道,调用控件我玩的还是挺溜的,同步异步了解,我的意思是两个类,在不同的线程中,我在一个类中调用另一个类的方法,一般情况下我们是(另一个类)用new来传递对象,或者form(另一个类 对象名)来传递。这两种方法都不能满足我这个需求,除非对象名用static来实现?有方法不加static就能够实现吗。我看过可以,不过在2000行代码里面,比较笨,没看懂。(那个家伙写了20多个类,跳来跳去看的头昏)
      

  4.   

    好吧,不过感谢你的帮助,我一开始的描述是我的实例,最后4楼的问题是通俗的说法。我详细描述一下吧
    首先我是做上位机,这个的应用是进行上位机和下位机通信,用的rs232串口。
    onSerialDataReceived(get.cs)这个是下位机触发信号事件。我在触发事件中需要调用一个(form.cs)类中的方法,也就是触发就调用。那么一般调用方法我们都是new一个对象实例或者将对象传递给当前类(这个是我现在仅知得两种方法)。
    但是这两种方法都一个问题,onSerialDataReceived这个事件是多线程事件,如果在创建实例的时候不同时static实例,在onSerialDataReceived中实例就是null,
    我看到有一份代码中可以不加static就能够将实例在onSerialDataReceived中调用想问问有人能够指点我一下不,代码看的头昏没看懂
      

  5.   

    1、你说你代码看不懂,那你怎么知道人家没有加STATIC
    2、如果人家要很复杂的调用才能实现STATIC的功能,那你何必要用人家的方法
    3、如果别人告诉你的方法就是你看不懂的方法,那你怎么办总结:如果你真的有不用STATIC就能调用的方法,那你就努力看懂人家的代码。如果没有就别纠结这个问题,直接用STATIC
      

  6.   

    1.因为static整个项目里面都没有
    2.人家的方法自己不用过怎么知道好不好。
    3.如果是我看不懂的方法那就太好了,方法调用最多100行,但是项目很多,而且跳类,没有注释,谢谢
    最后说一句,我在看,承认是想要简单一点,有人教肯定方便一点。
    最后我总结一下:个人感觉意思就是对象设置成实例的方法,或者类?这块其实大家看代码讨论很方便,但是代码太长,所以只能将问题稍微细化了问,谢谢
      

  7.   

    不是,初始化了。只是没有static的话就是这样