Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2010, 19:21   #1
iHikita
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 38
По умолчанию Зависание программы при выполнении GET запроса

Помогите пожалуйста, программа зависает при выолнении GET запросов по таймеру. Интервал таймера 2 секунды. Чем можно заменить таймер, чтобы программа не висла когда запросы встают в очередь? Или как сделать, чтобы сначало выполнялся запрос, а потом уже таймер начинал действовать?

Код:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

            // Функция ShellExecute из библиотеки shell32.dll выполняет операцию над указанным файлом.
            [DllImport("shell32.dll")]
            static extern IntPtr ShellExecute(
            IntPtr hwnd,        // <- дескриптор родительского окна.
            string Operation,   // <- операция: может принимать одно из следующих значений: "find", "explore", "edit", "open" или "print"
            string File,        // <- имя файла или папки - в зависимости от значения параметра Operation.
            string Parameters,  // <- список параметров, передаваемых загружаемому приложению
            string Directory,   // <- путь к файлу, указанному в File
            int nShowCmd);      // <- определяет вид главного окна загружаемого приложения

            public static void NewWindow(string url)
            {
                string browser = (string)Registry.GetValue(Registry.ClassesRoot + @"\http\shell\open\command", "", "nothing");
                browser = browser.Trim('"').ToLower();
                browser = browser.Substring(0, browser.IndexOf(".exe") + 4);
                ShellExecute(IntPtr.Zero, "open", browser, url, "", 1);
            }

        string MD1;
        string MD2;
        int n;
        int Num;
        string[] line = new string[10];

        public string MD5Hash(string instr)
        {
            string strHash = string.Empty;

            foreach (byte b in new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(instr)))
            {
                strHash += b.ToString("X2");
            }
            return strHash;
        }

        string post()
        {
            try
            {
                Random Ran = new Random();
                System.Net.WebRequest reqGET = System.Net.WebRequest.Create(@"http://site.com/");
                n=Ran.Next(5);
                textBox1.AppendText("Используется прокси: " + line[n] + "\n");
                WebProxy proxy = new WebProxy(line[n]);
                proxy.BypassProxyOnLocal = true;
                reqGET.Proxy = proxy;
                reqGET.Timeout = 3000;
                System.Net.WebResponse resp = reqGET.GetResponse();
                System.IO.Stream stream = resp.GetResponseStream();
                System.IO.StreamReader sr = new System.IO.StreamReader(stream);
                string s = sr.ReadToEnd();
                return (s);
            }
            catch(WebException)
                {
                  return ("Error");
                }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
            string str = post();
            if (str != "Error")
            {
                MD2 = MD5Hash(str);
                if (MD2 != MD1) { NewWindow("http://site.com/"); timer1.Enabled = false; }
                MD1 = MD2;
                Num += 1;
            }
            else
            {
                Num += 1;
                textBox1.AppendText("Невозможно подсоединиться к прокси" +" "+ line[n]+"\n");
            }
            label1.Text = "Страничка проверенна " + Convert.ToString(Num) + " раз(а).";            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Interval = Convert.ToInt16(numericUpDown1.Value)*1000;
            textBox1.AppendText("Загруженны прокси:\n");
            using (StreamReader sr = new StreamReader("ip.txt"))
            {
                for (int i = 0; i < 5; i++)
                {
                    line[i] = sr.ReadLine();
                    textBox1.AppendText(line[i]+"\n");
                }
            }
            M1:MD1 = MD5Hash(post());
            if (MD1 == MD5Hash("Error")) goto M1;
            timer1.Enabled = true;
        }
    }
}
iHikita вне форума Ответить с цитированием
Старый 16.07.2010, 00:20   #2
Blourid
Форумчанин
 
Аватар для Blourid
 
Регистрация: 09.03.2010
Сообщений: 138
По умолчанию

используй timer1_Elapsed
Вчера
Blourid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Try и except при выполнении запроса с ошибкой Droid БД в Delphi 4 17.04.2010 19:10
Проблемы с кодировкой при выполнении post запроса FANATID Работа с сетью в Delphi 7 01.03.2009 14:46
Ошибка при выполнении запроса Шани БД в Delphi 4 27.07.2007 13:04
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13
Ошибка при выполнении запроса Elena БД в Delphi 2 25.05.2007 16:19