Я бы, вероятно, не использовал отдельный процесс для открытия файла. Вместо этого я, вероятно, использовал бы фоновый поток (если бы я думал, что операция займет много времени и возможно заблокирует поток пользовательского интерфейса).
private delegate void FileOpenDelegate(string filename);
public void OpenFile(string filename)
{
FileOpenDelegate fileOpenDelegate = OpenFileAsync;
AsyncCallback callback = AsyncCompleteMethod;
fileOpenDelegate.BeginInvoke(filename, callback, state);
}
private void OpenFileAsync(string filename)
{
// file opening code here, and then do whatever with the file
}
Конечно, это не очень хороший рабочий пример (он ничего не возвращает), и я не показал, как обновляется пользовательский интерфейс (вы должны использовать BeginInvoke на уровне пользовательского интерфейса, поскольку фоновый поток не может обновить поток пользовательского интерфейса). Но этот подход, как правило, заключается в том, как я выполняю асинхронные операции в .Net.