Я задал аналогичный вопрос здесь ; спасибо всем, кто предоставил предложение! Однако, похоже, что моя проблема больше, чем описанная выше, поэтому я публикую новый вопрос.
Проблема заключается в том, что мне нужно, чтобы мой пользовательский интерфейс реагировал на загрузку большого документа с использованием стороннего элемента управления под названием document
. document
- это класс, встроенный в сторонний элемент управления, у меня нет возможности его обновить, и у него нет функции Invoke
.
Я пытаюсь использовать для этого Backgroundworker
. Код, который я пробую, имеет следующую форму:
public class MyForm: Form
{
private delegate bool OpenFile(string filePath);
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
OpenFile oF = new OpenFile(document.Open);
var openFile = this.Invoke(oF, MyFileName);
e.Result = openFile;
}
}
Теперь в потоке пользовательского интерфейса, которому принадлежит document
, когда он выполняет операцию Open
, должно появиться диалоговое окно с обновлением, а основной поток должен оставаться отзывчивым все равно могу перетащить форму в любом случае мне нравится). Это то, чего я пытался достичь.
Проблема в том, что приведенный выше код приведет к зависанию обоих моих потоков (основного потока пользовательского интерфейса и потока диалогового окна) во время загрузки. У меня вопрос, есть ли способ решить эту проблему?
P / S: я пробовал var openFile = Invoke(oF, MyFileName)
и var openFile = BeginInvoke(oF, MyFileName)
и var openFile = OtherControl.Invoke(oF, MyFileName)
, все не помогло.