Как рисовать от 100 до 1000 базовых фигур, не останавливая отображение в c # - PullRequest
0 голосов
/ 23 декабря 2018

Я попытался использовать простой цикл for:

using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;

namespace WPFGamesChess
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            Dispatcher.Invoke(makeGrid);
        }

        public void makeGrid()
        {
            Size s = new Size(20, 20);
            for (int y = 0; y < s.Height; y++)
            {
                for (int x = 0; x < s.Width; x++)
                {
                    Rectangle r = new Rectangle();
                    if ((x+y) % 2 == 0)
                    {
                        r.Fill = Brushes.Black;
                    }
                    else
                    {
                        r.Fill = Brushes.White;
                    }
                    r.Stroke = Brushes.Black;
                    r.StrokeThickness = 0;

                    double h = (RootGrid.Height / s.Height);
                    double w = (RootGrid.Width / s.Width); 

                    r.Height = h;
                    r.Width = w;

                    r.Margin = new Thickness(0, 0, RootGrid.Width - r.Width - (x*w*2), RootGrid.Height - r.Height - (y*h*2));
                    RootGrid.Children.Add(r);
                }
            }
        }
    }
}

Однако, если сделать это таким образом, то загрузка дисплея, насколько я могу судить, не загружается.Я подумал, что это должно быть многопоточным, но я также не могу понять, как это сделать.Я пытаюсь создать сетку для шахматной доски, но я хотел бы иметь возможность повторно использовать этот код для создания более крупной сетки для стратегической игры.

1 Ответ

0 голосов
/ 24 декабря 2018

Если вам нужно всего несколько тысяч объектов ... и большинство из них не будут анимироваться ... тогда обычное связывание данных должно справиться с этим без привязки к потоку GUI.Вот пример из приложения, которое я написал , в котором каждая ячейка сетки содержит 17 различных элементов, всего около 15 000:

enter image description here

Это реализовано с помощью ItemsControl с использованием Canvas в качестве панели и DataTemplating для выбора типов элементов для создания.Я не замечаю какой-либо заметной паузы при запуске, и редактирование в реальном времени и т. Д. Совершенно плавное.

Кроме того, поскольку вы специально упомянули шахматы, вот пример того, что я создалранее, используя ту же технику, со следующим результатом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...