Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我会得到这个NullReferenceException C#_C#_Datagridview_Error Handling_Nullreferenceexception - Fatal编程技术网

为什么我会得到这个NullReferenceException C#

为什么我会得到这个NullReferenceException C#,c#,datagridview,error-handling,nullreferenceexception,C#,Datagridview,Error Handling,Nullreferenceexception,我一直在为一个应用程序编写代码,通过Active directory查询来管理连接的用户和设备 然后我得到这个错误“NullReferenceException未处理”大约一周,使用代码这是现在唯一停止应用程序的事情 这是我使用的背景代码: private void backgroundWorker2_Dowork(object sender, DoWorkEventArgs e) { try { e.Result = ""; int val =

我一直在为一个应用程序编写代码,通过Active directory查询来管理连接的用户和设备

然后我得到这个错误“NullReferenceException未处理”大约一周,使用代码这是现在唯一停止应用程序的事情

这是我使用的背景代码:

private void backgroundWorker2_Dowork(object sender, DoWorkEventArgs e)
{
    try
    {
        e.Result = "";

        int val = 6000;

        for (int a = 1; a <= val; a++)
        {
            counter.Text = Convert.ToString(a);
            if (txtWorkGroupName.Text == "") return;

            DataTable dt = new DataTable();
            dt.Clear();

            dt.Columns.Add(new DataColumn("ComputerName", typeof(String)));                        //0
            dt.Columns.Add(new DataColumn("IP", typeof(String)));            //1
            dt.Columns.Add(new DataColumn("MAC", typeof(String)));       //2
            dt.Columns.Add(new DataColumn("Descubierto", typeof(String)));       //3
            //int i = 0;

            try
            {
                // Datos del grupo WinNT://&&&&(Nombre del grupo de trabajo)
                DirectoryEntry DomainEntry = new DirectoryEntry("WinNT://" +  txtWorkGroupName.Text + "");
                DomainEntry.Children.SchemaFilter.Add("Computer");


                ///*************************************************
                /// Interacting with pc's in the domain
                ///*************************************************

                foreach (DirectoryEntry machine in DomainEntry.Children)
                {
                    string strMachineName = machine.Name;
                    string strMACAddress = "";
                    IPAddress IPAddress;
                    DateTime discovered;

                    try
                    {
                        IPAddress = getIPByName(machine.Name);
                    }
                    catch
                    {
                        continue;
                    }//try/catch

                    ///*************************************************
                    /// Get Mac
                    ///*************************************************
                    strMACAddress = getMACAddress(IPAddress);

                    discovered = DateTime.Now;
                    ///*************************************************
                    /// Add lines in the grid
                    ///*************************************************

                    DataRow dr = dt.NewRow();


                    dr[0] = machine.Name;
                    dr[1] = IPAddress;
                    dr[2] = strMACAddress;
                    dr[3] = Convert.ToString(discovered);
                    dt.Rows.Add(dr);

                ///*************************************************
                /// SETTING DATASOURCE
                ///*************************************************
                    dgvComputers1.DataSource = dt;


                    Thread.Sleep(2000);

                }//foreach loop


            catch (Exception ex)
            {
                {
                    MessageBox.Show(ex.Message);
                }
            }


            if (backgroundWorker2.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
        }
    }
    catch (NullReferenceException ex)
    {
        MessageBox.Show("error:" + ex);
    }
    catch (NoNullAllowedException ex)
    {
        MessageBox.Show("error:" + ex);
    }
    catch (AccessViolationException ex)
    {
        MessageBox.Show("error:" + ex);
    }
}

尝试在中放置一个断点(如果您使用的是Visual Studio),并检查每一行,查看错误发生的位置

然后,在到达测线后,在watch窗口中查看空值

然后执行:
if(nullThing==null)返回
这应该可以完成任务。

请查看以下内容:

`private void backgroundWorker2_Dowork(object sender, DoWorkEventArgs e)
删除那个

`
应该是:

private void backgroundWorker2_Dowork(object sender, DoWorkEventArgs e)
你试过这个吗

dr[1] = IPAddress ?? "(unknown)";

这是一个多线程问题。在某个时刻,您试图在datagrid在屏幕上绘制自身的同时更改datagrid的数据源

 dgvComputers1.DataSource = dt;
尝试将其替换为:

 this.Invoke(delegate(DataTable table)
 {
     dgvComputers1.DataSource = table;
 }, dt);


我认为这不会导致他所看到的错误。这可能只是粘贴代码时的一个输入错误。这可能会在编译时导致语法错误,而不是在运行时导致异常。`会导致编译错误。这只是代码格式上的一个输入错误。我不知道为什么这个问题被否决得如此糟糕。有人愿意留下评论吗?我的意思是,很明显,OP在某种程度上,呃,格式有问题,英语也有问题,但我们没有看到更糟糕的情况吗?是什么返回了这个java风格的函数
getIPByName(machine.Name)?无效的或者它会引发异常?@OP-请调试您的代码,并向我们显示发生异常的具体行。它总是失败还是只是偶尔出现?出于调试目的。。。对吗?因为这听起来不像是真正解决问题的方法。。。我设置了一个错误管理器来抛出这些例外,这样我就可以阅读它们了,我发现了这个。。。。“AL control datagridview无法添加没有列的行,必须先添加列…”然后是error@StefanH是的,但是一旦你发现了问题,找出它,看看它是从哪里来的,然后解决它:-)@HBellamy但是添加你的建议,完全绕过这个问题,又有什么用呢,是否有助于确定问题的原因?这是一个尚未完成的列行错误管理。。。。我不知道如何添加一列,如果它试图填补一行我不明白你在说什么,它看起来不像你回答我,无论你是否尝试过这个。所以,让我用另一种方式重复我的答案:替换您的行
dr[1]=IPAddress带有
dr[1]=IPAddress??“(未知)”我有一个附加的进程,我不能像那样更改。在这一点上,我引入了一种从远程计算机提取IP地址的方法。。。不必ping设备,因为我直接在广告中收集信息,模拟我的访问级别,这能解决什么问题?问题是关于
NullReferenceException
查看堆栈跟踪。NullReferenceException发生在System.Windows.Forms.DataGridViewRowHeaderCell.PaintPrivate中。你说得对,我正试图用itSo测试应用程序,调用invoke更改任何内容?显示的方法也称为backgroundWorker2_Dowork-因此这肯定指向一些线程问题。
 this.Invoke(delegate(DataTable table)
 {
     dgvComputers1.DataSource = table;
 }, dt);