Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
1

Форма зависает через некоторое время работы

25.09.2013, 20:10. Просмотров 1816. Ответов 18
Метки нет (Все метки)


Приветствую.
Имеется программа, которая каждые 5 сек. открывает страницы в контроле awesomium (вместо webbrowser).
Через какое-то время работы форма зависает. В чем может быть причина?

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
        private void btn_start_Click(object sender, RoutedEventArgs e)
        {
            start();
        }
 
        private void btn_stop_Click(object sender, RoutedEventArgs e)
        {
            stop = true;
        }
 
        System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer(); // Таймер перед проверкой вступили в раздачу или нет
        int i = 0;
        void start()
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 5);
            timer.Start();
        }
 
        bool stop = false;
        private void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            if (i % 2 == 1)
            {
                Web.ExecuteJavascript("location.href='http://www.steamgifts.com'");
                listView1.Items.Insert(0, "www.steamgifts.com - " + i++);
                if(!stop) start();
            }
            else if (i % 2 != 1)
            {
                Web.ExecuteJavascript("location.href='http://www.steamgifts.com/forum'");
                listView1.Items.Insert(0, "www.steamgifts.com/forum - " + i++);
                if (!stop) start();
            }
            lbl_amount.Content = i.ToString();
        }
XAML
XML
1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="773" xmlns:my="http://schemas.awesomium.com/winfx">
    <Grid>
        <ListView Height="287" HorizontalAlignment="Left" Margin="453,12,0,0" Name="listView1" VerticalAlignment="Top" Width="285" />
        <Button Content="start" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="btn_start" VerticalAlignment="Top" Width="75" Click="btn_start_Click" />
        <Button Content="stop" Height="23" HorizontalAlignment="Left" Margin="102,12,0,0" Name="btn_stop" VerticalAlignment="Top" Width="75" Click="btn_stop_Click" />
        <my:WebControl HorizontalAlignment="Left" Margin="12,41,0,0" Name="Web" VerticalAlignment="Top" Height="258" Width="435" Source="http://www.steamgifts.com" />
        <Label Content="Label" Height="28" HorizontalAlignment="Left" Margin="383,11,0,0" Name="lbl_amount" VerticalAlignment="Top" Width="64" />
    </Grid>
</Window>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2013, 20:10
Ответы с готовыми решениями:

Компьютер зависает через некоторое время работы
Может зависнуть при включении, либо через 5 минут, 3 часа. На вирусы проверял cureit-ом и 360 total...

MD Athlon 64, 1800 MHz, ECS RS480-M, 1024 Мб DDR, NVIDIA GeForce 7600 GS - зависает через некоторое время работы.
Тип ЦП AMD Athlon 64, 1800 MHz (9 x 200) 3000+ Системная плата ECS RS480-M (3 PCI, 1 PCI-E x16, 2...

Ноутбук зависает спустя некоторое время работы
Здравствуйте. Ноут сам зависает через некоторое время работы. При этом можно закрываться...

Через некоторое время зависает проводник и интернет
Всем доброго времени суток.Windows 7 сразу после запуска все работает нормально,но мин через 15-20...

18
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
25.09.2013, 21:10 2
Это не удевительно, я бы тоже завис. У Вас таймер каждый раз останавливается и создается новый, а старый висит в памяти.

Добавлено через 5 минут
и еще, с таким подходом кнопка стоп обязана не работать.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
26.09.2013, 10:01  [ТС] 3
Цитата Сообщение от Dexa Посмотреть сообщение
Это не удевительно, я бы тоже завис. У Вас таймер каждый раз останавливается и создается новый, а старый висит в памяти.

Добавлено через 5 минут
и еще, с таким подходом кнопка стоп обязана не работать.
А каким образом можно избавиться от старого таймера, перед созданием нового?
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
26.09.2013, 11:26 4
Цитата Сообщение от TakeshiWhite Посмотреть сообщение
А каким образом можно избавиться от старого таймера, перед созданием нового?
А зачем от него избавляться чтоб создать новый? Не проще-ли отказаться от нового в пользу старого? Просто не надо старый таймер стопорить и не надо создавать новый. А если и решите остановить таймер, то вместо создания нового, снова запускайте старый.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
26.09.2013, 11:43  [ТС] 5
Переделал код таким образом:
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
        private void btn_start_Click(object sender, RoutedEventArgs e)
        {
            СоздатьТаймер();
            start();
        }
 
        private void btn_stop_Click(object sender, RoutedEventArgs e)
        {
            stop = true;
        }
 
        System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer(); // Таймер перед проверкой вступили в раздачу или нет
        void СоздатьТаймер()
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 5);
        }
        int i = 0;
        void start()
        {
            timer.Start();
        }
 
        bool stop = false;
        private void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            if (i % 2 == 1)
            {
                Web.ExecuteJavascript("location.href='http://www.steamgifts.com'");
                listView1.Items.Insert(0, "www.steamgifts.com - " + i++);
                if(!stop) start();
            }
            else if (i % 2 != 1)
            {
                Web.ExecuteJavascript("location.href='http://www.steamgifts.com/forum'");
                listView1.Items.Insert(0, "www.steamgifts.com/forum - " + i++);
                if (!stop) start();
            }
            lbl_amount.Content = i.ToString();
        }
Прога все равно зависла примерно на 300 загрузке страницы. Выходит дело было не в лишних таймерах, а в чем-то другом. Но вопрос в чем...

Добавлено через 10 минут
Вот только что проверил еще раз - зависла на 308 загрузке странички
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
26.09.2013, 12:01 6
попробуйте else if (i % 2 != 1) заменить на простое else . Хотя не уверен.
Еще if(!stop) start(); замените на start(); а
C#
1
2
3
4
private void btn_stop_Click (object sender, RoutedEventArgs e)
 {
 stop = true; 
}
я бы заменил на
C#
1
2
3
4
private void btn_stop_Click (object sender, RoutedEventArgs e)
 {
 timer.stop(); 
}

Не по теме:

А WebControl это какой у Вас браузер? В других местах работает норм? Можно ссылку PLZ?

0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
26.09.2013, 12:05  [ТС] 7
Цитата Сообщение от Dexa Посмотреть сообщение
А WebControl это какой у Вас браузер? В других местах работает норм? Можно ссылку PLZ?
Awesomium — это библиотека, для интеграции браузера на базе Chromium в своё приложение.
http://www.awesomium.com
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
26.09.2013, 12:08 8
и еще, я бы переменную i увеличивал вне условиях, а до проверки условий. Не знаю как оно себя ведет в Вашем случае. Я самоучка и не пробовал такой подход.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
26.09.2013, 12:10  [ТС] 9
Запустил в таком виде как вы посоветовали. Напишу о результатах немного позже.
У меня возникло такое ощущение, что проблема именно в awesomium'e.
Если вы знакомы с ANTS Performance Profiler, то могу выложит ее результаты работы с этим приложением. Я ANTS недавно использую и не совсем понимаю куда смотреть, чтобы увидеть причины зависания.
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
26.09.2013, 12:18 10
ну можно попробовать использовать стандартный веббраузер,правда ишак не особо с яваскриптами дружит,но я как-то писал прогу бот для какого-то сайта,а там все на аяксе,но осел справился. Указывал в Navigate "javascript:\"blablabla\"" и работало.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
26.09.2013, 13:44  [ТС] 11
Цитата Сообщение от Dexa Посмотреть сообщение
ну можно попробовать использовать стандартный веббраузер
Уже написал один раз на стандартном. Проблем было выше крыши. В итоге пришлось все переписывать под awesomium. Awesomium справился на ура.
Программа у меня должна работать как минимум 12 часов без остановки, получая и отправляя данные. Но вот этот косяк с зависанием все коту под хвост отправляет.

Добавлено через 1 час 12 минут
Все равно зависла, но уже не на 308, а на 306 загрузке странички.
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
26.09.2013, 15:13 12
а использование браузера это обязательно? Может можно обойтись без браузера? Ну или запасной вариант. Браузер после запроса унечтожать освобождая тем самым память и создавать вновь только по таймеру. Так же есть вероятность что браузер не успевает за 5 сек обработать запрос,проверте работу программы на статистической локальной странице.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
27.09.2013, 10:35  [ТС] 13
Цитата Сообщение от Dexa Посмотреть сообщение
а использование браузера это обязательно? Может можно обойтись без браузера? Ну или запасной вариант. Браузер после запроса унечтожать освобождая тем самым память и создавать вновь только по таймеру. Так же есть вероятность что браузер не успевает за 5 сек обработать запрос,проверте работу программы на статистической локальной странице.
Без браузера это как?) Если только каким-то образом без контрола получать исходник, а так же каким-то образом без контрола нажимать на кнопки на сайте.
Грузить страницы браузер успевает почти всегда. На случай если не успел загрузить у меня стоит обработка исключения которое он выплюнет в этом случае. Так же если он вообще виснет при загрузке, то по таймеру страница начинает заново грузиться.
0
962 / 765 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
27.09.2013, 10:48 14
Без браузера это как?) Если только каким-то образом без контрола получать исходник
HttpWebRequest, HttpWebResponse - возможно они вам помогут.
0
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
27.09.2013, 11:23  [ТС] 15
Цитата Сообщение от Konctantin Посмотреть сообщение
HttpWebRequest, HttpWebResponse - возможно они вам помогут.
Они не подходят. Я же использую awesomium, а не webbrowser
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
27.09.2013, 12:00 16
Цитата Сообщение от TakeshiWhite Посмотреть сообщение
Они не подходят. Я же использую awesomium, а не webbrowser
При чем тут это? Вы можете отправлять и принимать данные без браузера,если Вам не надо отображать веб страницы то HttpWebRequest решает вопрос об отправке запросов,нагрузка меньше чем с использованием браузера,данные можно отправлять как в гет так и в пост,болие гибок для настройки заголовков.
0
962 / 765 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
27.09.2013, 13:03 17
Они не подходят. Я же использую awesomium, а не webbrowser
Вы даже не удосужили себя прочитать что это такое.

Не по теме:


напомнило:
-Могу вам предложить борщ
-Нет, спасибо я читаю только детективы.

1
7 / 7 / 3
Регистрация: 27.06.2013
Сообщений: 48
27.09.2013, 17:32  [ТС] 18
Цитата Сообщение от Konctantin Посмотреть сообщение
Вы даже не удосужили себя прочитать что это такое.
Awesomium логинится на сайте, что получить доступ к некоторым данным. Сможет ли то, что вы мне предлагаете получать эти данные?
0
78 / 78 / 11
Регистрация: 29.08.2013
Сообщений: 263
27.09.2013, 19:55 19
Разумеется можно. Неужели Вы так свято верете в то что майкасовтовский осел или тотже хром использует технологии под грифом "совершенно секретно". В классе httpwebrequest есть все,и куки и возможность аунтификации на сервере. Часто для авторизации бывает достаточно в хеадер вбить зарание известные куки,так я на перле делал бота,но в крайнем случае можно и пост запрос. Вариантов много. Вы всеже прочтите про HttpWebRequest и поймете что совсем не обязательно нагружать процессор браузером.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2013, 19:55

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

Подключаюсь.а через некоторое время нет зависает
У меня проблема с подключением (отвируса избавился) но подключение глючит Подключаюсь.а через...

Через некоторое время после включения компьютер зависает
Всем привет. Недавно обновил комплектующие: Мать Asrock Extreme3 990 FX Проц AMD 8320 FX + кулер...

Компьютер полностью зависает, через некоторое время после загрузки
Когда включают комп он загружается и через n время полностью виснет помогите пожалуйста проц amd...

После включения через некоторое время ноутбук зависает намертво, независимо от нагрузок
Доброго времени суток. Недавно начал намертво зависать ноутбук, происходит это при активности любых...


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

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

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