0 / 0 / 1
Регистрация: 31.05.2014
Сообщений: 24
1

Взаимодействие MainWindow.xaml.cs <->App.Xaml.cs

13.03.2017, 17:54. Показов 2894. Ответов 2

Я попробовал и, безусловно, оценил удобство и простоту использования WPF, поначалу казавшийся мне сложной конструкцией.

Я, конечно, еще не достаточно опытен, но по логике стразу сделал ссылку в App.Xaml.cs на MainWindow.xaml.cs:

C#
1
MainWindow Hwnd = new MainWindow();
Только вот беда, при вызове объекта из MainWindow дебаггер ругается, что объект используется другим потоком.

Теперь по логике, я явно подозреваю, что делаю что-то не правильно и почему-то думается, что возможно нужно копать в сторону Dispose();

Добавлено через 7 минут
"Так как WPF требует, чтобы главный поток работал в однопоточном подразделении (Single-threaded apartment), то метод Main помечается атрибутом STAThreadAttribute. Однопоточное подразделение содержит один поток, в данном случае главный. Это означает, что к элементам, созданным в этом потоке можно обратиться только из этого же потока. В то же время WPF предлагает эффективный способ взаимодействия между потоками, о котором мы позже поговорим..."
https://metanit.com/sharp/wpf/3.php

Это то о чем мне нужно узнать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2017, 17:54
Ответы с готовыми решениями:

Как создать xaml файл в проекте
Создан проект и хочу изменить вид combobox не смог найти xaml файл в проекте, чтобы отредактировать...

Конвертер HTML to XAML
Нашел в интернете класс конвертер из HTML в XAML, работает прекрасно но не видит картинок....

Рефлексия приложения - где искать файл xaml
Добрый день. С помощью Рефлектора получил код приложения, оно на WPF. В коде Uri uri= new...

Доступ к полям MainWindow.xaml.cs из ViewModel
Здравствуйте пробую обычным способом получить доступ к полям MainWindow.xaml.cs или к public...

2
8362 / 4570 / 1788
Регистрация: 11.02.2013
Сообщений: 9,681
13.03.2017, 17:54 2
Цитата Сообщение от Tommy Vercetti Посмотреть сообщение
сделал ссылку в App.Xaml.cs на MainWindow.xaml.cs
где именно сделана эта ссылка? И зачем она там нужна?
0
0 / 0 / 1
Регистрация: 31.05.2014
Сообщений: 24
14.03.2017, 04:36  [ТС] 3
Цитата Сообщение от ViterAlex Посмотреть сообщение
где именно сделана эта ссылка? И зачем она там нужна?
App.xaml.cs листинг:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace MyApplication
{
    /// <summary>
    /// Логика взаимодействия для App.xaml
    /// </summary>
    public partial class App : Application
    {
        KeyboardListener KeyHook = new KeyboardListener();
        MainWindow Hwnd = new MainWindow(); //Ну, вроде бы, где нужно сделана
 
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            KeyHook.KeyDown += new RawKeyEventHandler(KListener_KeyDown);
        }
 
        void KListener_KeyDown(object sender, RawKeyEventArgs args)
        {
            Console.WriteLine(args.Key.ToString());
            Hwnd.Close(); //System.InvalidOperationException
        }
 
        private void Application_Exit(object sender, ExitEventArgs e)
        {
            KeyHook.Dispose();
        }
    }
}
А нужна, чтобы вызывать в App.xaml.cs объекты интерфейса из Windows.xaml(.cs)

Добавлено через 5 минут
В принципе могу весь код запихнуть в MainWindow.xaml.cs, чтобы всё наверняка заработало и сразу, но не хочется нарушать правила хорошего тона и структуру программы. Ну Вы поняли.

Добавлено через 6 часов 45 минут
Мучаюсь-мучаюсь - не помогают ни async await, ни Dispatcher... Просто ужас какой-то. Зачем сделали эти потоки разделенные "изолированные"...

Добавлено через 1 час 18 минут
Нигде! Нигде нет внятного ответа на вопрос и решения этой проблемы!
Всё в таком духе: Ошибка доступа из потока к элементам управления И все... Вопрос не закрыт, тема зависает в воздухе.

Никто не программирует в среде WPF что ли? Походу легче переназначить точку входа в приложение, что-то там подкорректировать, чем с этими потоками голову ломать. Безопасность обеспечили, а функционировать оно что-то не функционирует, либо мы все тупые.

Добавлено через 2 часа 27 минут
Вообщем перенёс весь код с класса APP в UI. Что характерно, ошибки с сообщениями о потоках не пропали (т.е. независимо от APP, в UI всё равно свои потоки... кошмар. Конечно я осознаю полезность многопоточности относительно многозадачности, быстродействия, и т.п., но для решения простых задач для однопоточных приложений - это геморой)

Убрал из App.xaml:
XML
1
2
3
4
<Application ...
             <!-- Startup="Application_Startup"
             Exit="Application_Exit" -->
...
и добавил в MainWindow.xaml:
XML
1
2
3
4
<Window ...
        Loaded="Window_Loaded"
        Closed="Window_Closed"
...
И соответственно
убрал из App.xaml.cs:
C#
1
2
3
4
5
6
7
8
9
private void Application_Startup(object sender, StartupEventArgs e)
{
...
}
 
private void Application_Exit(object sender, ExitEventArgs e)
{
...
}
и добавил в MainWindow.xaml.cs:

C#
1
2
3
4
5
6
7
8
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
        ...
        }
        private void Window_Closed(object sender, EventArgs e)
        {
        ...
        }
+ заветный диспетчер (планировщик потоков) для устранения пресловутой ошибки:
C#
1
Dispatcher.BeginInvoke(new ThreadStart(delegate { TextBox.Text = "На чужой поток не разевай роток!"; }));
Всем спасибо за внимание.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2017, 04:36

Открыть Form вместо MainWindow.xaml - form1.cs
В общем решил я изменить дизайн своей программы на C# - windows forms. Столкнулся с тем что в...

При переносе MainWindow.xaml в отдельную папку проект не билдится
Создаю хелоуворд-WPF приложение. Создаю папку View и переношу (перетаскиваю) MainWindow.xaml в эту...

Добавление данных в app.xaml.cs
В многих книжках читал о создании данных статичных в app.xaml.cs я добавил в свой private...

Как подключить стили из App.xaml?
VS 2019 Version 16.4.2. Создаю новый проект из шаблона 'WPF App (.NET Framework)'. В 'App.xaml'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.