У меня есть приложение WPF, в котором используются инструменты для отчетов, включенные в Visual Studio 2010. У меня были некоторые другие проблемы, которые я решил, создав граф объектов, которые все обозначены как сериализуемые и т. д., как указано на других веб-страницах.Обработчик события SubreportProcessing не может получить доступ к моей модели просмотра из-за того, что был на другом потоке
Элемент управления ReportViewer содержится в файле WindowsFormsHost
. Я обрабатываю событие SubreportProcessing
объекта ReportViewer.LocalReport
, чтобы предоставить данные для дополнительного отчета.
График объектов, о которых я сообщаю, генерируется в моей модели просмотра, и эта модель просмотра содержит ссылку на нее. Обработчик SubreportProcessing
находится в моем коде за моим окном (возможно, это не лучшее место, но я просто хочу, чтобы ReportViewer работал на этом этапе).
Вот проблема: В моем обработчике события, я пытаюсь получить ссылку на мой ViewModel используя следующий код:
var vm = DataContext as FailedAssemblyReportViewModel;
При вызове обработчика, эта линия выбрасывает InvalidOperationException
с сообщением The calling thread cannot access this object because a different thread owns it.
Я не знал, что обработчик может быть вызван в другой теме. Как я могу это решить?
Я попытался несколько поисков, но все, что я придумал в отношении обновления пользовательского интерфейса из другого потока с помощью Диспетчера, но это не будет работать в этом случае ...
Я не думаю, что как я представляю ReportViewer, это будет иметь какое-либо отношение к этому - ReportViewer вызывает обработчик событий из другого потока и будет делать это независимо от того, как элемент управления сделал это в окне. – Steve
Я не понимаю, что вы говорили. Я пытался предоставить вам альтернативу, которая больше MVVM, чем кажется, что вы реализовали. В любом случае, рад, что вы смогли решить вашу проблему. – darkArk
Спасибо за подсказку для подзапроса :) – Steve