스레드 및 스레드 우선 순위를 처리하는 다음 프로그램에서 작업하고 있습니다.C# Null 참조 예외
풍부한 텍스트 상자 (DisplayTextBox)와 두 개의 버튼 (앱 실행을위한 StartButton 및 앱 닫기를위한 ExitButton)을 포함하는 Windows 폼을 구성했습니다.
양식에서 여러 스레드를 만들고 차례로 실행하고 있습니다. 각 thread가 사용하는 메소드는 Threading 클래스에 있습니다. 해당 메서드는 PrintOnScreen()입니다.
이 메서드에서는 스레드 이름과 우선 순위를 StringBuilder 유형의 str에 추가합니다. 그런 다음 DisplayTextBox (Form.cs에 있음)에 str의 내용을 표시하려고합니다.
그러나 "NullReferenceException 처리되지 않았습니다 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다."오류가 발생합니다. 오류가 발생한 행은 다음과 같습니다.
DisplayTextBox.Text = Convert.ToString (str);
이 오류를 해결하는 데 도움을 주시기 바랍니다 수 있습니까? 감사. 당신의 도움에 대한 모든
편집
감사합니다. 이 문제를 해결하기 위해 PrintOnScreen 메서드를 Form.cs 클래스에 복사하고 Threading.cs를 삭제했습니다.
나중에 Anand가 제공 한 코드를 사용하여 t2.Join() 아래에 배치했습니다. 이제 그것은 매력처럼 작동합니다.
어떤 개체가 null인지 아십니까? 이 질문에 대한 가능한 대답은 두 가지뿐입니다. 첫 번째는 ** DisplayTextBox입니다. ** 두 번째는 ** str **입니다. 물론 폼의 DisplayTextBox에 대한 참조를 전달하는 곳을 볼 수 없습니다. Thread1은 Form1을 상속하지만 Form1의 컨트롤을 참조하는 것은 아닙니다. –
코드를 수정하고 ** DisplayTextBox **에 대한 참조를 전달하더라도 메인 UI 스레드가 아닌 별도의 스레드에서 컨트롤을 수정할 수 없으므로 텍스트 변경을 호출해야합니다. –
여러 스레드에서 액세스하는 데이터에 대한 액세스를 실제로 동기화해야합니다. 예를 들어 두 스레드를 모두 동일한 StringBuilder 인스턴스에 쓰고 Threads 컬렉션을 반복합니다. – Jan