Подождите, пока процесс завершит асинхронную работу, а затем вызовите функцию в главной форме

Я пишу редактор для игры с C #. Моя программа открывается как файл .txt, запуская процесс notepad.exe. Если этот процесс завершается, я хочу вызвать функцию в главной форме (чтобы обновить текстовое поле). Вот что я делаю до сих пор:

 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;
    }

Функция GetRealPathByNode () возвращает строку полного пути к файлу, на который указывает узел TreeView. DisplayText () читает текст из файла, на который указывает узел, и отображает его в richtextbox.

После выполнения моя основная форма все еще пригодна для использования, как я и хотел, но когда процесс завершается (блокнот закрыт), он выдает ошибку, в которой говорится, что функция NotePadHasEnded не имеет доступа к объекту treeView1, поскольку выполняется в другом процессе.

Как я могу создать процесс, который вызывает функцию в моей основной форме при ее выходе, асинхронно? Я знаю, что это работает, когда я использую функцию WaitForExit (), но тогда моя Форма зависает и ждет, пока блокнот закроется. Я хочу, чтобы пользователь мог открывать другие текстовые файлы с помощью редактора, и когда один редактор закрывается, текст richtextbox не обновляется в моем графическом интерфейсе.

/редактироватьТеперь решено. Благодаря ответу Вудмана я заменил

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

с участием

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

Ответы на вопрос(3)

Ваш ответ на вопрос