File Dialog from a Background Worker
backgroundworker, c#, dialog, multithreading
Solution
It's not recommended to invoke the UI from the background worker DoWork event handler. `BackgroundWorker` is meant to do work on a non-UI thread to keep the UI responsive. You should ask for any file information before starting the `BackgroundWorker` object with `RunWorkerAsync`.
Problem
While maintaining some code, I discovered that we have an infinite hang-up in a background worker. The worker requires access to a script file. The original code was written to pop up a file dialog if no script file was defined, to allow the user to select one. It looks something like this: ``` private void bgworker_DoWork(object sender, DoWorkEventArgs e) { ... snip ... if (String.IsNullOrWhitespace(scriptFile)) { scriptFile = PromptForScript(); } ... snip ... } private string PrompForScript() { string script = ""; OpenFileDialog openDialog = new OpenFileDialog(); if (openDialog.ShowDialog() == DialogResult.OK) { script = openDialog.FileName; } return script; } ``` I've read up a bit about `MethodInvoker`, but almost all of the invoke methods require that you call them from a control. The background worker in question is running from a separate class, which doesn't extend `Control`. Do I use the form that calls the class with the bgworker for that? Or is there another way of interrupting the thread for user input?