2016-05-09 5 views
-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"); 
} 
+3

コードで_GUI_l=thisを追加しましたので、私は、変数をインスタンス化しませんでしたか? – Snixtor

+0

私はそれを意味する場合は、button_upload_clickのGUI_logic.csに設定しています。 – Arcane

+0

あなたはそうではありません。そのclickイベントは、 '_GUI_l'のメソッドを呼び出す新しいスレッドを開始しますが、' _GUI_l'をインスタンス化することは一切ありません。それは 'null'なので、エラーです。 –

答えて

0

OK]をクリックして答えを見つけました。コメントは提案のように、私はあなたのコードで何もそれが実際に設定されている、 `GUI_logic._GUI_l`されている変数のセットを示していない

public GUI_logic() { 
     _GUI_l = this; 
     InitializeComponent(); 
} 
関連する問題