2014-10-17 79 views
0

命名空间与这两个类都是相同的。我需要在WhatsAppSend类中调用xyz()方法。无法调用类的方法

这是我在Form1.cs方法

public void SendWhatsAppMsg() 
{ 
try 
{ 
WhatsAppSend ws; 
ws = new WhatsAppSend(this); //Error Coming on this 
ws.xyz(txtNickName.Text.ToString(), 
     gridSender.Rows[iCurrentChannelNo].Cells[0].Value.ToString(), 
     gridSender.Rows[iCurrentChannelNo].Cells[1].Value.ToString(), 
     CreateArrayFrom(i + 1, (i + 1) + iMsgLimitPerNo), 
     dropWhatsappType.SelectedItem.ToString(), 
     SendingData(dropWhatsappType.SelectedItem.ToString()), 
     ext); 
} 
catch(Exception e) 
{ 
txt.log += e.ToString(); 
} 
} 

方法,我想在其他类调用WhatsAppSend.cs

namespace WhatsApp_Bulk 
{ 
    public class WhatsAppSend 
    { 
     public static WhatsAppBulk form1; 
     public WhatsAppSend(WhatsAppBulk _form1) 
      { 
       form1 = _form1; 
      } 
    public static String line = ""; 
    public static String command = ""; 
    public static string[] dst; 
    public static int count_sleep = Convert.ToInt32(form1.txtMsgGap.Text); 
    public static string WhatsAppType = ""; 
    public static string DataToSend = ""; 
    public static string ext = ""; 
public void xyz(string nickname, string sender, string password, string[] Datadst, string DataWhatsAppType, string DataDataToSend, string Dataext) 
     { 
      dst = Datadst; 
      WhatsAppType = DataWhatsAppType; 
      DataToSend = DataDataToSend; 
      ext = Dataext; 
      WhatsApp wa = new WhatsApp(sender, password, nickname, true); 
     } 
    } 
} 

错误:

System.TypeInitializationException: The type initializer for 'WhatsApp_Bulk.WhatsAppSend' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at WhatsApp_Bulk.WhatsAppSend..cctor() in d:\WhatsApp Bulk\WhatsApp Bulk\WhatsAppSend.cs:line 32 
    --- End of inner exception stack trace --- 
    at WhatsApp_Bulk.WhatsAppSend..ctor(WhatsAppBulk _form1) 
    at WhatsApp_Bulk.WhatsAppBulk.SendWhatsAppMsg() in d:\WhatsApp Bulk\WhatsApp Bulk\Form1.cs:line 367 

请告诉我在哪里出错

+0

在哪个行中引发异常 – vallabha 2014-10-17 06:10:42

+1

您的设计是非常有缺陷的。您将来自实例构造函数的'WhatsAppBulk'表单实例设置为静态字段('form1')。想想看。 – 2014-10-17 06:16:54

回答

3
public static int count_sleep = Convert.ToInt32(form1.txtMsgGap.Text); 

form1null时,此行执行类型初始化。 您在稍后执行的实例构造函数中设置了form1

这是TypeInitializationException的常见原因。

UPD:

我可以建议以下

public class WhatsAppSend 
{ 
    public WhatsAppBulk form1; 
    public WhatsAppSend(WhatsAppBulk _form1) 
    { 
     form1 = _form1; 
     count_sleep = Convert.ToInt32(form1.txtMsgGap.Text); 
    } 
    public String line = ""; 
    public String command = ""; 
    public string[] dst; 
    public int count_sleep; 
    public string WhatsAppType = ""; 
    public string DataToSend = ""; 
    public string ext = ""; 
    public void xyz(string nickname, string sender, string password, string[] Datadst, string DataWhatsAppType, string DataDataToSend, string Dataext) 
    { 
     dst = Datadst; 
     WhatsAppType = DataWhatsAppType; 
     DataToSend = DataDataToSend; 
     ext = Dataext; 
     WhatsApp wa = new WhatsApp(sender, password, nickname, true); 
    } 
} 

请注意,公共实例字段还是不好的设计,但我不知道在哪个环境下,你会使用这个类,所以我让他们公开。

+0

你的速度更快! – mybirthname 2014-10-17 06:13:41

+1

此外,请注意,堆栈跟踪告诉你到底是哪里出现问题:“在WhatsApp_Bulk.WhatsAppSend..cctor()在D:\ WhatsApp批量\ WhatsApp批量\ WhatsAppSend.cs:32行”即。 .cs文件的第32行,这应该变成那行代码。 – 2014-10-17 06:14:32

+0

SO可以做些什么来使用'公共静态int count_sleep = Convert.ToInt32(form1.txtMsgGap.Text);'我应该初始化它 – Kirtesh 2014-10-17 06:16:28

0

使WhatsAppSend类静态然后调用,根据我的假设该类中声明的变量是静态的,所以类应该有相同的访问修饰符。