Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626

Не рисуются точки

30.08.2021, 18:47. Показов 1718. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Необходимо по быстрому нарисовать несколько точек на canvas, если рисую одну или несколько все ок, как только помещаю в цикл ничего не рисует, хотя имя окна меняется, значит вроде работает все, вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            while (true)
            {
                iterration += 1;
                int i = r.Next(1, 7);
                if (i == 1 || i == 2) pozitionPoint = new Point((a.X + pozitionPoint.X) / 2, (a.Y + pozitionPoint.Y) / 2);
                if (i == 3 || i == 4) pozitionPoint = new Point((b.X + pozitionPoint.X) / 2, (b.Y + pozitionPoint.Y) / 2);
                if (i == 5 || i == 6) pozitionPoint = new Point((c.X + pozitionPoint.X) / 2, (c.Y + pozitionPoint.Y) / 2);
                ellipse = new Ellipse();
                ellipse.Width = 4;
                ellipse.Height = 4;
                ellipse.StrokeThickness = 2;
                ellipse.Stroke = Brushes.Black;
                ellipse.Margin = new Thickness(pozitionPoint.X, pozitionPoint.Y, 0,0);
                canvas.Children.Add(ellipse);
                base.Title = iterration.ToString();
                System.Threading.Thread.Sleep(50);
            }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2021, 18:47
Ответы с готовыми решениями:

Создать форму, в случайном месте которой рисуются точки рандомного цвета
Необходимо создать форму, на которой рисуются точки в случайном месте и рандомного цвета. в ней нужно использовать имеющийся класс. Нужно...

Какой командой рисуются точки в 2д
Привет, какой командой рисуются точки в 2д? Если точнее имеется массив содержавший элементы с координатами (x,y) у каждого. Необходимо все...

Точки на графике рисуются с заданным временем
Само задание звучит так: "Провести визуализацию инфицирования популяции. Экземпляр заражает каждый день одного индивида. Популяция 1000...

8
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.08.2021, 18:56
Chizel, нельзя в GUI приложениях блокировать основной поток вечным циклом, иначе у вас не будет обновляться интерфейс.
0
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
30.08.2021, 18:56  [ТС]
QuakerRUS, и как тогда сделать?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.08.2021, 19:05
Chizel, сделайте ограниченное количество проходов по циклу.

Добавлено через 7 минут
Цитата Сообщение от Chizel Посмотреть сообщение
System.Threading.Thread.Sleep(50);
И это тоже неудачная идея. Интерфейс обновится в тот момент, когда ваш метод закончит выполнение.
0
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
30.08.2021, 19:21  [ТС]
QuakerRUS, Но мне нужно именно, чтобы цикл был бесконечным, а я глядел что там с точками происходит
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.08.2021, 19:23
Chizel, создайте таймер и в нем точки добавляйте, если задержки должны быть. Или в другом потоке.
0
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
30.08.2021, 19:30  [ТС]
QuakerRUS, сделал таймер
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
28
29
30
31
32
33
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            a = new Point(300, 0);
            b = new Point(600, 400);
            c = new Point(0, 400);
 
            pozitionPoint = new Point(300, 200);
            r = new Random();
            TimerCallback tm = new TimerCallback(Calc);
            Timer timer = new Timer(tm, 0, 0, 50);
            
        }
 
        private void Calc(object obj)
        {
            while (true)
            {
                iterration += 1;
                int i = r.Next(1, 7);
                if (i == 1 || i == 2) pozitionPoint = new Point((a.X + pozitionPoint.X) / 2, (a.Y + pozitionPoint.Y) / 2);
                if (i == 3 || i == 4) pozitionPoint = new Point((b.X + pozitionPoint.X) / 2, (b.Y + pozitionPoint.Y) / 2);
                if (i == 5 || i == 6) pozitionPoint = new Point((c.X + pozitionPoint.X) / 2, (c.Y + pozitionPoint.Y) / 2);
                ellipse = new Ellipse();
                ellipse.Width = 4;
                ellipse.Height = 4;
                ellipse.StrokeThickness = 2;
                ellipse.Stroke = Brushes.Black;
                ellipse.Margin = new Thickness(pozitionPoint.X, pozitionPoint.Y, 0, 0);
                canvas.Children.Add(ellipse);
                base.Title = iterration.ToString();
                System.Threading.Thread.Sleep(50);
            }
        }
Все встает в строке ellipse = new Ellipse(); - вызывающим потоком должен быть sta
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.08.2021, 20:36
Лучший ответ Сообщение было отмечено Chizel как решение

Решение

Chizel, во-первых вы в таймер засунули вечный цикл с паузами. Выбирайте что-то одно: или вечный цикл с паузами, или таймер. Во-вторых при работе с GUI в другом потоке надо использовать Dispatcher.

Добавлено через 1 час 2 минуты
Chizel, судя по наличию canvas, предполагаю, что у вас проект WPF. Чтобы с каждым элементом не работать через диспетчер, можно использовать Timer из System.Windows.Forms.

XAML:

XML
1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Canvas Name="canvas">
        <Button Name="Button" Click="Button_Click">Button</Button>
    </Canvas>
</Window>
Код:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Shapes;
 
namespace WpfApp1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Timer timer1 = new Timer();
        int iterration = 0;
        Point a, b, c, pozitionPoint;
        Ellipse ellipse;
        Random r = new Random();
 
        public MainWindow()
        {
            InitializeComponent();
            timer1.Interval = 50;
            timer1.Tick += new System.EventHandler(timer1_Tick);
            a = new Point(300, 0);
            b = new Point(600, 400);
            c = new Point(0, 400);
            pozitionPoint = new Point(300, 200);
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            timer1.Start();
        }
 
        void timer1_Tick(object sender, EventArgs e)
        {
            iterration += 1;
            int i = r.Next(1, 7);
            if (i == 1 || i == 2) pozitionPoint = new Point((a.X + pozitionPoint.X) / 2, (a.Y + pozitionPoint.Y) / 2);
            if (i == 3 || i == 4) pozitionPoint = new Point((b.X + pozitionPoint.X) / 2, (b.Y + pozitionPoint.Y) / 2);
            if (i == 5 || i == 6) pozitionPoint = new Point((c.X + pozitionPoint.X) / 2, (c.Y + pozitionPoint.Y) / 2);
            ellipse = new Ellipse();
            ellipse.Width = 4;
            ellipse.Height = 4;
            ellipse.StrokeThickness = 2;
            ellipse.Stroke = Brushes.Black;
            ellipse.Margin = new Thickness(pozitionPoint.X, pozitionPoint.Y, 0, 0);
            canvas.Children.Add(ellipse);
            base.Title = iterration.ToString();
        }
    }
}
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
31.08.2021, 17:21  [ТС]
QuakerRUS, я через диспатчер в итоге написал вчера, спасибо за подсказку. С таймером интересно, погляжу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2021, 17:21
Помогаю со студенческими работами здесь

Не рисуются линии
помогите в чем проблема #include&lt;iostream.h&gt; #include&lt;graphics.h&gt; #include&lt;conio.h&gt; struct Point { int x,y; ...

Не рисуются линии
Если бы был тьютор который помог бы понять что не так, то воспользовался. Но в данном случае в цикле рисует только одну линию, думаю что...

Не рисуются линии
Пожалуйста, помогите разобраться. В канве не отрисовываются линии. ctx.fillStyle = &quot;black&quot;; ctx.lineWidth = 3; ...

Как рисуются спрайты?
Как создать простой 2д спрайт, на какой программе вы бы посоветовали это реализовать?

Не рисуются все тени
Добрый вечер! Нужно изобразить цилиндр, конус и шар, а также их тени, которые они отбрасывают. Вот кусок кода, который отрисовывает...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru