Форум программистов, компьютерный форум, киберфорум
C#: XAML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
1 / 1 / 1
Регистрация: 31.05.2014
Сообщений: 42

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

13.03.2017, 17:54. Показов 4634. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2017, 17:54
Ответы с готовыми решениями:

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

Конвертер HTML to XAML
Нашел в интернете класс конвертер из HTML в XAML, работает прекрасно но не видит картинок. Пошарился по коду, понял почему, метод AddImage...

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

2
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
13.03.2017, 17:54
Цитата Сообщение от Tommy Vercetti Посмотреть сообщение
сделал ссылку в App.Xaml.cs на MainWindow.xaml.cs
где именно сделана эта ссылка? И зачем она там нужна?
0
1 / 1 / 1
Регистрация: 31.05.2014
Сообщений: 42
14.03.2017, 04:36  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2017, 04:36
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru