スレッドとスレッドの優先順位を扱う次のプログラムで作業しています。C#Null参照例外
私はリッチテキストボックス(DisplayTextBox)と2つのボタン(アプリケーションを実行するためのStartButtonとアプリケーションを閉じるためのExitButton)を含むウィンドウフォームを構築しました。
フォームで、私はいくつかのスレッドを作成し、それらを次々に実行しています。各スレッドで使用されるメソッドは、Threadingクラスにあります。問題のメソッドはPrintOnScreen()です。
このメソッドでは、スレッド名と優先度をStringBuilder型のstrに追加しています。次に、DisplayTextBox(Form.csにあります)にstrの内容を表示します。
しかし、「NullReferenceExceptionが未処理です:オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生しています。エラーが発生する行は次のとおりです。
DisplayTextBox.Text = Convert.ToString(str);
このエラーを解決するのに手伝ってもらえますか?ありがとう。あなたの助けのためのすべての
編集
感謝。この問題を解決するために、PrintOnScreenメソッドをForm.csクラスにコピーし、Threading.csを破棄しました。
後でAnandによって与えられたコードを使用し、それをt2.Join()の下に置きました。今は魅力のように機能します。
どのオブジェクトがヌルであるか知っていますか?この質問には2つの可能な答えがあります。最初は** DisplayTextBoxです。** 2番目は** str **です。もちろん、フォーム上のDisplayTextBoxへの参照をどこに渡すか分かりません。スレッディングはForm1を継承しますが、Form1のコントロールへの参照があるわけではありません。 –
コードを修正して** DisplayTextBox **への参照を渡しても、メインのUIスレッド以外の別のスレッドでコントロールを変更できないため、テキストの変更を呼び出す必要があります。 –
複数のスレッドからアクセスするデータへのアクセスを実際に同期することを検討する必要があります。たとえば、両方のスレッドを同じStringBuilderインスタンスに書き込んで、Threadsコレクションを繰り返し処理しているとします。 – Jan