Ram349 Ответов: 4

Невозможно привести объект типа ' MainWindow к типу system.componentmodel.isynchronizeinvoke в WPF


Всем Привет,
У меня есть эта проблема, что мое приложение WPF в своем главном окне.
Я пытаюсь вызвать нижеприведенное событие wrapevent в своем окне.

__browseInput.Нажмите Кнопку += MainModule.WrapEvent(__browse_Click).EventHandler;

И я реализую функциональность упаковки в другом классе.Этот класс зависит от класса для моего окна.Код приведен ниже

public static EventInvoker WrapEvent(обработчик EventHandler) where TEventArgs : EventArgs
{
если (_eventWrapper == нуль)
{
_eventWrapper = новый EventWrapper();
_eventWrapper.CaughtException += ShowUnhandledException;
}
если (_eventWrapper.Синхронизация == значение null &&усилителя; _mainForm != нуль)
{
_eventWrapper.Sync =(ISynchronizeInvoke) _mainForm;
}
вернуться _eventWrapper.Wrap(обработчик);
}

В этом _eventWrapper.Sync =(ISynchronizeInvoke) _mainForm; я получаю ошибку.
Не могли бы вы, пожалуйста, предоставить мне решение.

Что я уже пробовал:

Меня пытались использовать
Dispatcher.BeginInvoke
- Но это не работает.

jimmson

О чем говорит ошибка?

Ram349

Привет Джимсон,
Спасибо, что откликнулись на мой пост.Я получаю ошибку не удается привести объект типа ' MainWindow к типу system.componentmodel.isynchronizeinvoke

Ram349

На самом деле я конвертирую приложение winforms в WPF

4 Ответов

Рейтинг:
23

jimmson

ISynchronizeInvoke это для WinForms, а не для WPF. Вам нужно использовать немного другой подход.

Более подробную информацию об этом вы можете найти здесь:

окно winforms - WPF не реализует ISynchronizeInvoke.InvokeRequired ERROR - переполнение стека[^]
c# - как использовать интерфейс ISynchronizeInvoke? - переполнение стека[^]


Рейтинг:
1

Richard MacCutchan

Вы не можете произвольно разыгрывать объекты разных типов. Видеть Интерфейс ISynchronizeInvoke (System.ComponentModel) | Microsoft Docs[^].


Ram349

Привет Ричард,
Спасибо, что откликнулись на мой пост.В этой строке _eventWrapper.Sync =(ISynchronizeInvoke) _mainForm; только для приведения я добавил ISynchronizeInvoke.
Не могли бы вы подсказать, как мне действовать дальше?

Richard MacCutchan

Что дальше делать? Как я уже говорил вам, вы не можете случайно бросить один тип на другой.

Рейтинг:
1

Richard Deeming

Если вы хотите написать код, который будет работать как в Windows Forms, так и в WPF, игнорируйте ISynchronizeInvoke интерфейс, и используйте SynchronizationContext вместо.

Класс SynchronizationContext (System.Продевать Нитку) | Майкрософт Документы[^]
Журнал MSDN: параллельные вычисления - это все о SynchronizationContext[^]
Понимание SynchronizationContext (Часть I)[^]


Рейтинг:
0

Gerry Schmitz

Просмотрите код "где используется".

Код, возможно, был чрезмерно спроектирован; или даже не используется.

Простая общественная акция&ЛТ;&ГТ; или кнопку func&ЛТ;&ГТ; имущество, которое может быть "присоединен к" часто все, что нужно ... и гораздо более понятно.