Espere a que el proceso finalice async y luego llame a una función dentro del formulario principal

Estoy codificando un editor para un juego con C #. Mi programa se abre como archivo .txt iniciando un proceso notepad.exe. Si ese proceso termina, quiero llamar a una función dentro del formulario principal (para actualizar el cuadro de texto). Esto es lo que estoy haciendo hasta ahora:

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

La función GetRealPathByNode () devuelve una cadena de la ruta completa del archivo al que apunta el nodo TreeView. DisplayText () lee el texto del archivo al que apunta el nodo y lo muestra en un cuadro de texto enriquecido.

Al ejecutarlo, mi formulario principal aún se puede usar como quería, pero cuando el proceso finaliza (el bloc de notas está cerrado), se produce un error que indica que la función NotePadHasEnded no tiene acceso al objeto treeView1 porque se está ejecutando en otro proceso.

¿Cómo puedo crear un proceso que llame a una función en mi formulario principal cuando se está saliendo de forma asíncrona? Sé que funciona cuando uso la función WaitForExit (), pero luego mi Formulario se bloquea y espera hasta que se cierre el bloc de notas. Quiero que el usuario pueda abrir otros archivos txt con el editor y, cuando se cierra un editor, el texto de richtextbox se está actualizando en mi GUI.

/Editar/ Ahora resuelto. Gracias a la respuesta de Woodman, sustituí

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

con

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta