Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2014, 08:23   #1
djeki7
 
Регистрация: 14.06.2014
Сообщений: 7
По умолчанию Ускорить загрузку окна

Здраствуйте форумчане. есть задача в динамическом создании большого количества контролов на форме. Я это делаю в цикле for в конструкторе главного окна, но проблема в том что контролов около 1000000 и форма загружается около минуты. пробовал использовать Dispatcher.BeginInvoke() - но тогда загружается окно и висит пока не создадутся все контролы, помогите правильно разбить на потоки создание контролов.
привожу код для примера:

Код:
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
             
            Brush r = new SolidColorBrush(Colors.Red);
            Brush bl = new SolidColorBrush(Colors.Black);
            Thickness t = new Thickness(1);

            

            for(int i=0; i<10; i++)
            {
                StackPanel sp = new StackPanel();
                sp.Orientation = Orientation.Horizontal;
                for(int x=0; x<1000; x++)
                {
                    Button b = new Button();
                    b.Width = 15;
                    b.Height = 15;
                    b.Background = r;
                    b.BorderBrush = bl;
                    b.BorderThickness = t;
                    sp.Children.Add(b);
                }
                Panel.Children.Add(sp);
            }
        }
    }
Код:
<Window x:Class="BoxPanel.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Auto">
            <StackPanel Name="Panel"/>
        </ScrollViewer>    
    </Grid>
</Window>
djeki7 вне форума Ответить с цитированием
Старый 07.12.2014, 10:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
контролов около 1000000
Можно поинтересоваться зачем столько много и что они делать должны?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.12.2014, 11:18   #3
djeki7
 
Регистрация: 14.06.2014
Сообщений: 7
По умолчанию

это будет приложение для управления светом,
на таймлайне находятся ключи (квадратики) если ключ включен то в данный момент времени свет в данном канале включен...
так вот каналов у меня 256, разрешение по времени 100мс. тоесть чтобы создать сцену длительностью в 5 мин мне нужно создать 3000 ключей на канал а всего получается 768000 ключей для 128 каналов, а если длительность больше то и ключей соответственно.....

сами ключи я пробовал делать на основе Rectangle, CheckBox, Button....
добавляя свои триггеры и свойства - результат скорость загрузки окна примерно одинаковая - около минуты для длительности в 5 мин.
Изображения
Тип файла: jpg Снимок.jpg (113.0 Кб, 124 просмотров)
djeki7 вне форума Ответить с цитированием
Старый 07.12.2014, 11:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А я бы делал таблицей. Самой обычной.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.12.2014, 11:49   #5
djeki7
 
Регистрация: 14.06.2014
Сообщений: 7
По умолчанию

я чето до таблицы не додумался, а подробнее можно?
djeki7 вне форума Ответить с цитированием
Старый 07.12.2014, 11:59   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Или может быть в WPF будет удобнее ListBox/ItemsControl и т.п., еще про VirtualizingStackPanel можно погуглить.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.12.2014, 12:08   #7
djeki7
 
Регистрация: 14.06.2014
Сообщений: 7
По умолчанию

ListBox/ItemsControl пробовал загрузка большого количества items занимает тоже много времени, про VirtualizingStackPanel - буду читать.
djeki7 вне форума Ответить с цитированием
Старый 07.12.2014, 12:53   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

такой контрол лучше самому рисовать или то что ниже предложили.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2014, 15:42   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а подробнее можно?
Увы... Не юзаю WPF. Но таблицы там полюбому должны быть.
Вот: http://msdn.microsoft.com/en-us/libr...vs.110%29.aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Про загрузку вопросик. _Den_1984 Общие вопросы Delphi 27 17.12.2012 09:57
Как ускорить загрузку текста в memo? zver777 Общие вопросы Delphi 3 10.01.2010 10:06
загрузку компьютера Bat{CMD}_Men Операционные системы общие вопросы 2 02.10.2009 16:05
Как ускорить загрузку списка ListBox из txt-файла? Dux Компоненты Delphi 24 30.10.2008 19:02
Как ускорить загрузку битмапа в tImage Altera Мультимедиа в Delphi 10 24.03.2008 17:39