-2
メインフォームにGUIのラベルがあります。フォームから、ボタンを押すと、新しいスレッドがパラメータとともに作成され、いくつかのことが起こり、最終的にはそれが完了したというラベルを更新したいと思います。しかし、私はNullRefferenceExceptionを取得しています。どうすれば更新できますか?私は基本的に別のプロジェクトで同じコードを使用しましたが、パラメータを指定してスレッドを開始しませんでした。ここに私のコードは次のとおりです。GUIのラベルを別のクラスのスレッドから変更する
GUI_logic.cs:
private void button_upload_Click(object sender, EventArgs e) {
UploadFile upload = new UploadFile();
t_upload = new Thread(() => upload.startUpload(file));
t_upload.Start();
}
public static GUI_logic _GUI_l;
delegate void updateLabelStatusCallback(string text);
public void updateLabelStatus(string message) {
if (this.label_status.InvokeRequired) {
updateLabelStatusCallback d = new updateLabelStatusCallback(updateLabelStatus);
this.Invoke(d, new object[] { message });
} else {
this.label_status.Text = message;
}
}
UploadFile.cs:
public void startUpload(OpenFileDialog file) {
string ext = Path.GetExtension(file.FileName);
switch (ext) {
case ".xml":
parseXMLFile(file.FileName);
break;
}
}
private void parseXMLFile(string file) {
I do stuff here
...
...
//And now I want to update the label
GUI_logic._GUI_l.updateLabelStatus("Done");
}
コードで
_GUI_l=this
を追加しましたので、私は、変数をインスタンス化しませんでしたか? – Snixtor私はそれを意味する場合は、button_upload_clickのGUI_logic.csに設定しています。 – Arcane
あなたはそうではありません。そのclickイベントは、 '_GUI_l'のメソッドを呼び出す新しいスレッドを開始しますが、' _GUI_l'をインスタンス化することは一切ありません。それは 'null'なので、エラーです。 –