none
WPF из Form RRS feed

  • Вопрос

  • Когда запускаем новый поток для UI WPF из WPF проекта, там делаем через Диспетчер, типа такого:

    this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
    {
    button1.Content = "111";
    });
    

     Не могу понять, как из проекта на Form создать окно WPF в НОВОМ потоке?

    Если без нового потока, то работает код:

    private void Form1_Load(object sender, EventArgs e)
    {
    MainWindow MainWindow1 = new MainWindow();
    MainWindow1.Visibility = System.Windows.Visibility.Visible;
    }
    

     А вот как это сделать в новом потоке?

    Нижеприведенный код выдает исключение - Сообщение об исключении = "Невозможно загрузить файл или сборку \"PresentationFramework.Seven Breeze, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" или один из зависимых от них компонентов. Не удается найти указанный файл.", Тип исключения = "System.IO.FileNotFoundException"

    private void Form1_Load(object sender, EventArgs e)
    {
    Thread t1 = new Thread(WPF);
    t1.SetApartmentState(ApartmentState.STA);
    t1.Start();
    }
    
    public void WPF()
    {
    MainWindow MainWindow1 = new MainWindow();
    MainWindow1.Visibility = System.Windows.Visibility.Visible;
    }
    

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:09 MSDN Forums consolidation (От:Visual C#)
    6 сентября 2010 г. 7:14

Ответы

Все ответы

  • ...я, может быть, как-то не так сформулировал вопрос...
    6 сентября 2010 г. 21:08
  • проблема больше неактуальна, тему можно удалить
    8 сентября 2010 г. 17:42
  • Могли бы изложить свой вариант решения?
    Для связи [Mail]
    9 сентября 2010 г. 5:54
  • http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/
    • Помечено в качестве ответа I.Vorontsov 15 сентября 2010 г. 11:20
    11 сентября 2010 г. 13:50
  • Проблема решилась, но не полностью. Дело в том, что в моем случае, окно WPF в новом потоке должно создаваться из плагина (DLL), подключаемого другой программой. Ее разработчик рекомендовал использовать в качестве окна WPF, не WPF Window, а WPF User Control Library.

    Моя прошлая ошибка, из-за которой я не мог отобразить окно WPF в новом потоке, оказалась в немного отличающемся механизме работы метода .Show() и установки свойства .Visibility = System.Windows.Visibility.Visible;. Только .Show() позволял отобразить окно WPF.

    Создавая проект WPF User Control Library вместо проекта WPF, я перехожу c объекта Window на объект UserControl. Но, как я понял, класс System.Windows.Controls, от которого наследуется UserControl, не поддерживает метода .Show, то есть я не могу отобразить его этим методом. В итоге, я так и не вижу окна WPF в новом потоке...

    17 сентября 2010 г. 7:02
  • Оказалось, проблема не в контроле (c User Control Library, то же самое, что и с Window)

    Но проблема все еще не решена. Лог исключения выглядит так:

    System.IO.IOException: Не удается найти ресурс "mainwindow.xaml".
    в MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
    в System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
    в System.IO.Packaging.PackagePart.GetStream()
    в System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
    в Example.MainWindow.InitializeComponent()
    23 сентября 2010 г. 6:49