Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
GORDec
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 24
#1

Зависание программы при смене изображения

22.10.2013, 12:23. Просмотров 401. Ответов 0
Метки нет (Все метки)

Помогите дельным советом. Программа зависает в процессе смены изображения - не систематично. Может выдержать 20-30 смен картинок, а может уже на 2м подвиснуть. Просто подвисает и загружается отладка, или просто закрывается. Память не перегружена .. все держится с районе 300-350мб. Привожу рабочие отрывки программы которые учавствуют в процессе зависания, и чтобы понять что нужно от программы.

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
// объявлено только собственно для смены изображения в процессе масштабирования при событии мыши wheel.
        BitmapImage bitmap2 = new BitmapImage(); 
        BitmapImage bitmap3 = new BitmapImage();
        BitmapImage bitmap4 = new BitmapImage(); 
 
private void Wheel(object sender, MouseWheelEventArgs e) //Выбирает изображение нужного качества для оптимизации изображения при масштабировании и последующего его перемещения по экрану
        {
           ....
               if (scale.ScaleX >= 0.8)
                    { a52.Source = bitmap2; } //a52 это image на канвасе
                    if (scale.ScaleX < 0.8 && scale.ScaleX >= 0.4)
                    { a52.Source = bitmap3; }
                    if (scale.ScaleX <= 0.3)
                    { a52.Source = bitmap4; }
        }
// зависание происходит в момент нажатия этих кнопок
private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            BitmapImage bitmap21 = new BitmapImage();
            BitmapImage bitmap31 = new BitmapImage();
            BitmapImage bitmap41 = new BitmapImage();
bitmap21.BeginInit();
            bitmap21.CacheOption = BitmapCacheOption.OnLoad;
            bitmap21.CreateOptions = BitmapCreateOptions.DelayCreation;
            bitmap21.UriSource = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"images\level4.jpg", UriKind.RelativeOrAbsolute);
            bitmap21.EndInit();
            bitmap21.Freeze();
            bitmap31.BeginInit();
            bitmap31.CacheOption = BitmapCacheOption.OnLoad;
            bitmap31.CreateOptions = BitmapCreateOptions.DelayCreation;
            bitmap31.UriSource = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"images\level4m07.jpg", UriKind.RelativeOrAbsolute);
            bitmap31.EndInit();
            bitmap31.Freeze();
            bitmap41.BeginInit();
            bitmap41.CacheOption = BitmapCacheOption.OnLoad;
            bitmap41.CreateOptions = BitmapCreateOptions.DelayCreation;
            bitmap41.UriSource = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"images\level4m03.jpg", UriKind.RelativeOrAbsolute);
            bitmap41.EndInit();
            bitmap41.Freeze();
            bitmap2 = bitmap21;
            bitmap3 = bitmap31;
            bitmap4 = bitmap41;
            if (scale.ScaleX > 0.7)
            {
                a52.Source = bitmap2;
            }
            if (scale.ScaleX < 0.8 && scale.ScaleX > 0.3)
            {
                a52.Source = bitmap3;
            }
           
            if (scale.ScaleX < 0.4)
            {               
                a52.Source = bitmap4;
            }             
 
        }
 
......
 
private void Button_Click_10(object sender, RoutedEventArgs e)
        {
// в остальных кнопках все аналогично первой, с той лишь разницей что ссылка на другие изображения
        }
XML
1
2
3
4
5
6
7
8
9
10
.....
<Canvas Name="imageCanv" MouseRightButtonDown="imageCanv_MouseRightButtonDown">
 
                <Image Height="11317" Name="a52" Stretch="Fill" Width="12562" AllowDrop="True" Canvas.Left="0" Canvas.Top="1">
                    <Image.LayoutTransform>
                        <ScaleTransform x:Name="scale"/>
                    </Image.LayoutTransform>
                </Image>  
            </Canvas>
....
3 одинаковых изображения с разным разрешением сделал для увеличения производительности, т.к. при движении масштабированного изображения с большим разрешением изображение сильно дергается, иногда просто виснет. Это было решено таким вот образом, зато появилась другая проблема. Изображения максимально оптимизировано, JPG grayscale.

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2013, 12:23
Ответы с готовыми решениями:

Нужно при смене изображения, освобождать память предыдущей картинки
Профилировать не удается, занятая под изображение память показывает как...

Зависание программы при скачивании файла
Добрый день. Как решить проблему зависания? Есть виндовс приложение оно...

Зависание программы при отправке POST-запроса
Каждые 5 сек выполняется: HttpWebRequest myRequest =...

Зависание программы при нажатия глобальной клавиши
Здравствуйте подскажите почему может зависать программа при нажатии клавиши? ...

Зависание программы
Написал программу для подсчета Md5Hash изображений, через openFileDialog...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2013, 12:23

Зависание программы/потока
Здравствуйте. Есть такой код Thread clientDeleteThread = new...

Зависание программы после клика
при нажатии на кнопку , выполняется код private void...

WPF. Ошибка при смене Visibility
Всем привет ! Меняю видимость темплейтных столбцов грида. Заметил, что из-за...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru