已回答 异常用户未处理System.NullReferenceExeption。驱动程序为空。

benc991

新成员
已加入
2020年10月28日
留言内容
4
编程经验
Beginner
我目前正在开发用于激光打印机的新应用程序。我正在使用集成了Twincat的Visual Studio 2017。我的主程序在PLC中,但是我有一个用C#编写的接口。我是C#的新手,所以我肯定缺少明显的东西。我已经成功构建了一个应用程序,但是当我尝试启动它时出现错误。

Mod编辑:附件已删除。在代码标签中发布代码,而不是屏幕截图
 
由主持人最后编辑:
Solution
以后,请在代码标签中张贴代码文本以及错误。在手机等小型设备上很难查看代码。

Anyway, the error is telling you exactly what the issue is. You are trying to access an object that is null. So either driver is null or driver.Content is null.

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,529
地点
弗吉尼亚州切萨皮克
编程经验
10+
以后,请在代码标签中张贴代码文本以及错误。在手机等小型设备上很难查看代码。

Anyway, the error is telling you exactly what the issue is. You are trying to access an object that is null. So either driver is null or driver.Content is null.
 
解决方案

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
另外,请提供有意义的标题以概述您的问题,以供将来参考。在此发布信息的每个人都需要有关其应用程序的帮助,因此您的标题绝对不会告诉我们该线程是否与我们相关。
 

benc991

新成员
已加入
2020年10月28日
留言内容
4
编程经验
Beginner
感谢您的帮助和评论。著名的。我曾经在PLC工作过,所以这是我第一次从事如此大的项目。我很奇怪,编译器在这种情况下没有发出错误。我需要给一个对象一个不同于零的值。我怎样才能做到这一点?我是否需要调用类型的类构造函数,还是因为其他原因导致我的错误?
 

benc991

新成员
已加入
2020年10月28日
留言内容
4
编程经验
Beginner
C#:
private DriverMode ModeSelect(Button Driver)
       
           
        {
            switch(Driver.Content.ToString())
            {
                case "Continuous":
                    return DriverMode.continuous;

                case "10 mm":
                    return DriverMode.mm10;

                case "5 mm":
                    return DriverMode.mm5;

                case "1 mm":
                    return DriverMode.mm1;

                case "0.1 mm":
                    return DriverMode.mm01;

                case "0.01 mm":
                    return DriverMode.mm001;

                default:
                    return DriverMode.continuous;
            }
           
        }
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
As suggested, the error message is telling you that you're trying to access a member of an object that doesn;t exist. You need to debug your code. You ALWAYS need to debug your code first. Place a breakpoint on that and, when execution breaks, use the debugger to see whether Driver or Driver.Content is null and then work backwards to determine why and what you need to do to fix it.
 

benc991

新成员
已加入
2020年10月28日
留言内容
4
编程经验
Beginner
谢谢,我做到了。问题是看似Driver.Content。它指出* Driver.Content threx是类型的异常"SystemNullReferenceException"
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,529
地点
弗吉尼亚州切萨皮克
编程经验
10+
我很奇怪,编译器在这种情况下没有发出错误。
不应该奇怪。编译器确实在编译时工作。您遇到的错误是在运行时。编译器在编译时执行的大多数静态分析都针对性能优化,而不是逻辑错误。有时它会警告您可能使用尚未初始化的对象,但它不会进行非常深入的检查。有第三方的静态分析工具,可以对程序代码进行更深入的分析,并可以发现类似此运行时错误的逻辑问题。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
我很奇怪,编译器在这种情况下没有发出错误。
Why would it? Look at your method. It receives a Button via a parameter and then proceeds to use the Content of that in code. How is the compiler supposed to know whether you will have set the Content of that Button at run time when you call that method?
 
最佳 底部