Poczekaj na zakończenie procesu asynchronicznego, a następnie wywołaj funkcję w formularzu głównym

Koduję edytor do gry z C #. Mój program otwiera się jako plik .txt, uruchamiając proces notepad.exe. Jeśli ten proces zakończy się, chcę wywołać funkcję w formularzu głównym (aby zaktualizować pole tekstowe). Oto co robię do tej pory:

 void OpenTextEditor(TreeNode node) 
    {
        Process editor = new Process();
        editor.StartInfo.WorkingDirectory = "%WINDIR%";
        editor.StartInfo.FileName = "notepad.exe";
        var txtfilelocation = GetRealPathByNode(node);
        var txtfile = File.ReadAllText(txtfilelocation,Encoding.Default);
        txtfile = txtfile.Replace("\n", "\r\n");
        File.WriteAllText(txtfilelocation,txtfile,Encoding.Default);
        editor.StartInfo.Arguments = txtfilelocation;
        editor.EnableRaisingEvents = true;
        editor.Exited += delegate {
            NotePadHasEnded(node);
        };
        editor.Start(); //starten  
    }

    public Delegate NotePadHasEnded(TreeNode node)
    {
        var txtfilelocation = GetRealPathByNode(node);
        var newfileloc = txtfilelocation;
        var newfile = File.ReadAllText(newfileloc, Encoding.Default);
        newfile = newfile.Replace("\r\n", "\n");
        File.WriteAllText(txtfilelocation, newfile, Encoding.Default);

        if (treeView1.SelectedNode == node) DisplayText(node);

        return null;
    }

Funkcja GetRealPathByNode () zwraca ciąg pełnej ścieżki pliku, na który wskazuje węzeł TreeView. DisplayText () odczytuje tekst z pliku wskazywanego przez węzeł i wyświetla go w polu richtextbox.

Po uruchomieniu mój główny formularz jest nadal użyteczny, tak jak chciałem, ale gdy proces zostanie zakończony (notatnik zamknięty), zgłasza błąd stwierdzający, że funkcja NotePadHasEnded nie ma dostępu do obiektu treeView1, ponieważ jest wykonywany w innym procesie.

Jak mogę utworzyć proces, który wywołuje funkcję w moim głównym formularzu, gdy jest zamykany asynchronicznie? Wiem, że działa, gdy używam funkcji WaitForExit (), ale wtedy mój formularz zawiesza się i czeka, aż notatnik się zamknie. Chcę, aby użytkownik mógł otwierać inne pliki txt za pomocą edytora, a gdy jeden edytor jest zamykany, tekst richtextbox jest aktualizowany w moim interfejsie GUI.

/Edytować/ Teraz rozwiązane. Dzięki odpowiedzi Woodmana zastąpiłem

            editor.Exited += delegate {
            NotePadHasEnded(node);
            };

z

  editor.Exited += delegate
        {
            this.Invoke((MethodInvoker)delegate()
            {
                NotePadHasEnded(node);
            });
        };

questionAnswers(3)

yourAnswerToTheQuestion