Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/23: Рейтинг темы: голосов - 23, средняя оценка - 4.87
1 / 2 / 0
Регистрация: 20.02.2018
Сообщений: 47

Не могу найти ошибку

13.12.2018, 22:41. Показов 4485. Ответов 9

Студворк — интернет-сервис помощи студентам
Помогите с нахождением ошибки, чисто словесное описание: часто при вращении фигуры picturebox просто вырубается что-ли и потом просто не работает
Вложения
Тип файла: rar Курсовые_КГ.rar (339.7 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2018, 22:41
Ответы с готовыми решениями:

Не могу найти ошибку в программе(для просмотра картинок):кнопка НАЗАД не работает(не становится активной) Найдите ошибку.

Не могу найти ошибку
При нажатии на кнопку должен выводиться массив с рандомными элементами, но при нажатии ничего не происходит. Всё вроде объявил :read: ...

Не могу найти ошибку
Ошибка

9
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
14.12.2018, 15:15
Лучший ответ Сообщение было отмечено xomedy как решение

Решение

Проблема в доступе к объектам в потоке. Делайте какую-нибудь синхронизацию потоков, в случае с BitMap можно создавать Clone.
System.InvalidOperationException: "В данный момент объект используется другим процессом."
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
 private void RD()
        {
            double angle = Math.PI / (90 / RotatingSpeed);
            while (_IsRotating) 
            {
                //try
               // {
                    lock (locker)
                    {
                    BeginInvoke(new Action(() => bmp = new Bitmap(bmp.Width, bmp.Height)));
                    
                    }
                    ClearZBuffer();
                    DrawPolyhedronByZBufferMetod(bmp, polyhedron, _LightPoint);
                    pictureBox1.Image = bmp;
                    Point3D[] vertexes = polyhedron.Vertexes;
                    for (int i = 0; i < vertexes.Length; i++)
                    {
                    
                    this.Invoke(new MethodInvoker(() => vertexes[i].Rotation(new Point3D((double)(bmp.Width / 2), 0.0, (double)(bmp.Height / 2)), _RotatingVector, angle))); 
                    }
              //  }
               // catch (Exception)
               // {
                //}
            }
            
        }
Миниатюры
Не могу найти ошибку  
1
1 / 2 / 0
Регистрация: 20.02.2018
Сообщений: 47
14.12.2018, 16:58  [ТС]
То есть мне надо рисовать копию, пока с основным bmp ведётся работа. Я правильно понял?
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
14.12.2018, 17:20
xomedy, я код досконально не изучал, но как понял происходит попытка одновременного доступа к объекту Bitmap, по идее чтобы её решить можно создавать копию Bitmap и с ней производить какие-либо действия и когда это нужно применять копию на оригинальный Bitmap в синхронизированном потоке. Таким образом все манипуляции будут происходить с копией объекта и множественного доступа не должно быть.
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
14.12.2018, 17:43
Лучший ответ Сообщение было отмечено xomedy как решение

Решение

10 минут крутилось-вертелось, ошибок не было.
Места где сделал изменения.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public Form1()
        {
            InitializeComponent();
            _PolyhedronColor = Color.BlueViolet;
            bmp = new Bitmap((int)((double)pictureBox1.Width), (int)((double)pictureBox1.Height));
            _IsRotating = false;
            GP(Graphic3D);
            pictureBox2.Image = Image.FromFile(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Application.StartupPath))) + "\\graphik1.png");
            //pictureBox2.Image = Image.FromFile(@"E:\Курсовые_КГ\kursach_S\graphik1.png");
        }
 
// поворот и рисование
        private void RD()
        {
            double angle = Math.PI / (90 / RotatingSpeed);
            while (_IsRotating) 
            {
                //try
               // {
                    lock (locker)
                    {
                    bmp = new Bitmap(bmp.Width, bmp.Height);
                    
                    }
                Bitmap clone = (Bitmap)bmp.Clone();
                ClearZBuffer();
                    DrawPolyhedronByZBufferMetod(clone, polyhedron, _LightPoint);
                    pictureBox1.Image = (Bitmap)clone.Clone();
                    Point3D[] vertexes = polyhedron.Vertexes;
                    for (int i = 0; i < vertexes.Length; i++)
                    {
                    
                    vertexes[i].Rotation(new Point3D((double)(clone.Width / 2), 0.0, (double)(clone.Height / 2)), _RotatingVector, angle); 
                    }
              //  }
               // catch (Exception)
               // {
                //}
            }
            
        }
 
//...
public void DrawPolyhedronByZBufferMetod(Bitmap bmp, Polyhedron polyhedron, Point3D Light)
        {
            Bitmap clone = (Bitmap)bmp.Clone();
            polyhedron.ResetBodyMatrix();
            for (int i = 0; i < polyhedron.Faces.Length; i++)
            {
                Point3D[] array = new Point3D[polyhedron.Faces[i].Points.Length + 1];
                polyhedron.Faces[i].Points.CopyTo(array, 0);
                array[array.Length - 1] = array[0];
                List<Tuple<Point3D, Point3D>> list = new List<Tuple<Point3D, Point3D>>();
                int num = (int)array.Min((Point3D x) => x.Z);
                int num2 = (int)array.Max((Point3D x) => x.Z);
                double[] array2 = polyhedron.Faces[i].Coefficient(new Point3D(0.0, 0.0, 0.0));
                double[] array3 = polyhedron.Faces[i].Coefficient(polyhedron.Center);
                for (int j = 0; j < 4; j++)
                {
                    array3[j] *= (double)Math.Sign(array3[3]);
                }
                Vector v = Vector.Point3DToVector(polyhedron.Center) - Vector.Point3DToVector(Light);
                double cos = GetCos1(-new Vector(array3[0], array3[1], array3[2]), v);
                int num3 = (int)((double)(int)polyhedron.Faces[i].Color.R * cos);
                num3 = ((num3 > 0 && num3 < 255) ? num3 : ((num3 > 0) ? 255 : 0));
                int num4 = (int)((double)(int)polyhedron.Faces[i].Color.G * cos);
                num4 = ((num4 > 0 && num4 < 255) ? num4 : ((num4 > 0) ? 255 : 0));
                int num5 = (int)((double)(int)polyhedron.Faces[i].Color.B * cos);
                num5 = ((num5 > 0 && num5 < 255) ? num5 : ((num5 > 0) ? 255 : 0));
                Color color = Color.FromArgb(num3, num4, num5);
                for (int k = num + 1; k <= num2; k++)
                {
                    list.Clear();
                    for (int l = 1; l < array.Length; l++)
                    {
                        int num6 = (int)Math.Min(array[l].Z, array[l - 1].Z);
                        int num7 = (int)Math.Max(array[l].Z, array[l - 1].Z);
                        if (num6 < k && num7 >= k && num6 != num7)
                        {
                            list.Add(new Tuple<Point3D, Point3D>(array[l], array[l - 1]));
                        }
                    }
                    int num8 = Math.Min(CalculateX(list[0].Item1, list[0].Item2, k), CalculateX(list[1].Item1, list[1].Item2, k));
                    int num9 = Math.Max(CalculateX(list[0].Item1, list[0].Item2, k), CalculateX(list[1].Item1, list[1].Item2, k));
                    for (int m = num8; m < num9; m++)
                    {
                        double num10 = 0.0;
                        num10 = (0.0 - (array2[0] * (double)m + array2[2] * (double)k + array2[3])) / array2[1];
                        lock (locker)
                        {
                            if (m > 0 && k > 0 && m < clone.Width && k < clone.Height && num10 > ZBuffer[m, clone.Height - k])
                            {
                                
                                ZBuffer[m, clone.Height - k] = num10;
                                bmp.SetPixel(m, clone.Height - k, color);
                                
                            }
                        }
                    }
                }
                
            }
        }
Вложения
Тип файла: rar kursach_S.rar (273.2 Кб, 3 просмотров)
1
1 / 2 / 0
Регистрация: 20.02.2018
Сообщений: 47
16.12.2018, 13:28  [ТС]
Спасибо большое!!!!
1
1 / 2 / 0
Регистрация: 20.02.2018
Сообщений: 47
18.12.2018, 13:27  [ТС]
А вторая отличает только графиком (функцией) но рисунок появляется на мгновение и исчезает. И что теперь делать делать? Тут с изменениями которые были внесены для первой, по факту поменял только функцию и работает совсем по-другому
Вложения
Тип файла: rar Kursach_L.rar (250.1 Кб, 2 просмотров)
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
18.12.2018, 15:07
Лучший ответ Сообщение было отмечено xomedy как решение

Решение

Исправил первый вариант.
Там достаточно изменить 1 строчку кода, чтобы не было ошибок. Все остальные копии bmp удалил. Тестируйте работоспособность.
C#
1
pictureBox1.Image = (Bitmap)bmp.Clone();
Вложения
Тип файла: rar kursach_L.rar (272.5 Кб, 1 просмотров)
1
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
18.12.2018, 15:09
Лучший ответ Сообщение было отмечено xomedy как решение

Решение

Цитата Сообщение от Nalik Посмотреть сообщение
10 минут крутилось-вертелось, ошибок не было.
Места где сделал изменения.
Здесь так же думаю нужно отменить все изменения сделанные мной ранее и просто изменить в этом месте
C#
1
pictureBox1.Image = (Bitmap)bmp.Clone();
1
1 / 2 / 0
Регистрация: 20.02.2018
Сообщений: 47
18.12.2018, 16:36  [ТС]
Да, поменял и мигать перестала фигура. Большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2018, 16:36
Помогаю со студенческими работами здесь

Не могу найти ошибку в коде
Нужно чтобы при заходе на форму на нажатие бутон 1 он скрывал предыдущие радиобутоны и показывал следующие но почему то доходит до...

Не могу найти ошибку в программе (игра)
Всем привет! Очень сильно прошу о помощи! - туплю 3 день, пытаюсь сам допереть, но, наверное, либо глаз замылился, либо я чего-то...

Сравнение чисел. Не могу найти ошибку
Пробую сравнить 2 числа. Код с кнопки double one = 8.88; double two = 5.33; if (one &gt;...

НЕ могу найти ошибку, гляньте одним глазком пж
Ребята не могу понять на что ругается программа в данных строчках. con.Open(); string str = &quot;insert into...

Не могу найти ошибку
static void Main(string args) { Console.Write(&quot;Ввести размер массива: &quot;); int n =...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru