Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> timer.Elapsed с другими параметрами 
V
    Опции темы
ddll
Дата 21.2.2011, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Здравствуйте 
столкнулся с такой проблемой 
мне необходим таймер который бы при определенном условии вызывал бы некий метод но Мой метод имееет два параметра отличные от делегата.
Тоесть если стандартный пример выглядит
static void Main()
{

timer = new System.Timers.Timer();
timer.AutoReset = true;
timer.Interval = 1000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

timer.Enabled = true;

return;
}

private void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
//Проблемма с реализацией Метода
Method(string name,int ves);

}
Заранее спасибо большое.
PM MAIL   Вверх
-Mikle-
Дата 21.2.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



в timer_Elapsed можете делать все что хотите... вызывать методы, с параметрами, без параметров... навжно. В чем собсно вопрос?

Код

void Method(string name, int ves)
{
   //..........
}

private void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
    Method("some string", 95);
}



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
ddll
Дата 21.2.2011, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Не могу понять как это сделать т.к.
 такой код  не скомпилируеться

void Method(string name, int ves)
{
   //..........
}

void tmr_Elapsed(object source, ElapsedEventArgs e)
        {
            Method(find,number);
        }
пишет find dont current in content и number dont current in content 
PM MAIL   Вверх
-Mikle-
Дата 21.2.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Ну правильно, если переменные не уровня класса, то и не видно их будет в том месте. Судя по этим заморочкам у вас, вам, мне кажется, надо начать с более простых основ, нежели с таймера. Объясните всю вашу задачу, приведите весь ваш код и не забудьте этот код заключить в теги подсветки кода (в редакторе ответов есть кнопочка Код)


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
ddll
Дата 21.2.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Спасибо это помогло!
Но возникла вторая проблемма вылитает:
System.OutOfMemoryException
Моя задача в том чтобы скачивать файл в случае если скачиваеться не он а другой(html с ошибкой) через 5 минут повторить.
Это приблизительный пример кода.
Код

class Program
    {
       static int number;
        
      
        static void Main(string[] args)
        {

          
            FileDownload();
           
            FileInfo ff = new FileInfo(@"C:\testing\"+number+".html");
            Timer tmr = new Timer();
            while (ff.Length < 580000)
            {
                
                tmr.AutoReset = false;
                tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
                tmr.Interval = 30000d;
                tmr.Start();


            }
            
        }
        static void FileDownload()
        {
            number++;
                WebClient webClient = new WebClient();
                webClient.DownloadFile(@"http://www.i.ua", @"C:\testing\"+number+".html");
          }
       static void tmr_Elapsed(object source, ElapsedEventArgs e)
        {
            FileDownload();
        }
        
    }


Проблемма в том что наблюдаеться неадекватная реакция по истичению моего интервала скачиваеться не один а сразу большое количество файлов.
Прочитал что таймер надо останавливать 
Код

  static void tmr_Elapsed(object source, ElapsedEventArgs e)
        {
            FileDownload();
            Timer tmr = (Timer)source;
            tmr.Stop();
        }


но это к сожалению тоже не помогло.

Это сообщение отредактировал(а) ddll - 21.2.2011, 17:34
PM MAIL   Вверх
-Mikle-
Дата 21.2.2011, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Простите, но ни по вашему краткому описанию, ни по вашему приблизительному коду, мне все еще не понятно, что требуется. Вижу что вы скачиваете файл, но при чем тут таймер, да еще и в цикле, который лихорадочно миллионы раз в секунду (как я понял пока не докачается первый файл) добавляет один и тотже обработчик события к таймеру. Малого того, каждые 30 секунд, не зависимо от того закончилось ли выполнение кода в обработчике события таймера, опять запускает всю имеющуюся пачку подписанных методов. Не сомневаюсь, что OutOfMemoryException приходит очень быстро smile


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
ddll
Дата 21.2.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Моя задача скачивать некий файл(xls) по определенной ссылке если он недоступен скачиваеться  html с ошибкой, xls весит приблизительно - 580000 байт html - 34000 тоесть по моей логике пока не закачаеться файл больше  580000 байт выполнять закачку. При этом делая паузу в 5 минут.

Я чувствую что мне надо обойтись без цикла и про верять просто if но только не могу понять как?

Очень нужна еще помошь.

Это сообщение отредактировал(а) ddll - 21.2.2011, 21:14
PM MAIL   Вверх
ddll
Дата 21.2.2011, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



В мыслях крутиться что надо через Таймер организовывать цикл но не могу придумать Как?
PM MAIL   Вверх
-Mikle-
Дата 21.2.2011, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Код

static Timer repeatDownloadTimer;
static void Main(string[] args)
{
    // эти строчки должны выполниться только один раз
    repeatDownloadTimer = new Timer();
    repeatDownloadTimer.Interval = 5 * 60 * 1000;
    repeatDownloadTimer.Elapsed += repeatDownloadTimer_Elapsed;

    // качаем файл
    bool isValid = DownloadFile("http://www.i.ua/......", "C:\\test\file");

    // если не скачали (ваш метод вернул false), то запускаем таймер
    if(isValid == false)
    {
        repeatDownloadTimer.Start();
    }

    Console.ReadLine();
}

static void repeatDownloadTimer_Elapsed(object source, ElapsedEventArgs e)
{
    // если файл скачали, то останавливаем таймер
    if(DownloadFile("http://www.i.ua/......", "C:\\test\file") == true)
    {
        // так
        repeatDownloadTimer.Stop();

        // или так (без разницы)
        // ((Timer)source).Stop();
    }
}

static bool DownloadFile(string fileURL, string saveTo)
{
    // Закачиваете файл себе из переданного fileURL и записываете его в saveTo
    // Здесь же, делаете проверку на то, скачалось ли то что вам нужно или скачалось другое
    // Возвращаете true, если скачался нужный вам файл, в противном случае верните false.
    // Настоятельно рекомендую не делать проверку по размеру 
    // файла, лучше смотреть на содержимое файла (HTML от 
    // XLS отличается по содержимому очень сильно)
}


Код писал прямо тут не проверял, но работать должен.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
ddll
Дата 21.2.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Спасибо большое завтра буду пробовать!
PM MAIL   Вверх
ddll
Дата 22.2.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Спасибо еще раз переделал под такой
В будушем обязательно планирую научиться отличать по формату но сейчас для проверки достаточно и по весу
Код

public class MyTimer
{
    static int number = 0; 
    static bool isValid = false;
    public static void Main()
    {
        try
        { 
            DownloadFile("http://www.i.ua/", "C:\\testing\\" + number + ".html");
                System.Timers.Timer tmr = new System.Timers.Timer();
                tmr.Elapsed += new ElapsedEventHandler(OnTimedEvent);
                tmr.Interval = 5 * 1000;
                tmr.Enabled = true;
                while (number < 4 & isValid == false);
            
        }
        catch
        { }
       Console.WriteLine("АВС");
       Console.ReadKey();
    }
    public static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        DownloadFile("http://www.i.ua/", "C:\\testing\\" + number + ".html");
        if (isValid == true || number == 4)
        {
            ((Timer)source).Stop();
        }
    }
    static void DownloadFile(string fileURL, string saveTo)
    {

        WebClient downloader = new WebClient();
        downloader.DownloadFile(fileURL, saveTo);

        FileInfo ff = new FileInfo("C:\\testing\\" + number + ".html");

        if (ff.Length > 580000)
        {
            isValid = true;
            
        }
        else
        {
            number++;
        }
    }

}




Это сообщение отредактировал(а) ddll - 22.2.2011, 17:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.