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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2011, 17:12   #1
tresh
Пользователь
 
Аватар для tresh
 
Регистрация: 06.07.2008
Сообщений: 30
По умолчанию код в поток и в таймер

привет) есть вот такой код в таймере, но его нужно поместить в поток и тоже запускать с некой переодичностью. Помогите сделать, ато у меня не получаеться.
Код:
 AdmMes.DownloadFile("http://site.ru/admin.txt", pathMes);

            StreamReader Adm = new StreamReader(pathMes, System.Text.Encoding.GetEncoding(1251));
            string message = Adm.ReadLine();
            if (previosmessage != message)
            {
                previosmessage = message;
                notifyIcon1.ShowBalloonTip(500, "Сообщение!", message, ToolTipIcon.Info);
            }
tresh вне форума Ответить с цитированием
Старый 20.06.2011, 18:21   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

http://www.csharp-examples.net/create-new-thread/
Guy вне форума Ответить с цитированием
Старый 20.06.2011, 18:39   #3
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

А к чему вот подобный код запихивать в поток...Не особо вижу в этом смысл...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 22.06.2011, 14:27   #4
tresh
Пользователь
 
Аватар для tresh
 
Регистрация: 06.07.2008
Сообщений: 30
По умолчанию

Цитата:
Сообщение от spamer Посмотреть сообщение
А к чему вот подобный код запихивать в поток...Не особо вижу в этом смысл...
Просто мне надо скачивать очень много файлов одновременно и программа в момент загрузки замирает на секунд 5 а потом ее снова отпускает и так с каждым тиком таймера. Если не поток, то как убрать это 5 секундное зависание?
tresh вне форума Ответить с цитированием
Старый 22.06.2011, 14:48   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

загоните саму загрузку в поток и обработку в поток, но вывод тултипа должен быть в основном потоке.
хорошо для этого подходит BackgroundWorker
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2011, 17:26   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Вот пример работы через пул потоков. Вроде BackgroundWorker тоже работает через пул потоков, но он удобнее для некоторых целей.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork));
        }

        public void DoWork(object notUsed)
        {
            MyParser parser = new MyParser();
            List<string> result = parser.GetData();
            AddToListBox(result);
        }

        private void AddToListBox(object result)
        {
            if (InvokeRequired)
                Invoke(new WaitCallback(AddToListBox), result);
            else
            {
                List<string> res = (List<string>)result;
                listBox1.Items.Clear();
                listBox1.Items.AddRange(res.ToArray<string>());
            }
        }
    }
}
DoWork будет выполнятся в другом потоке полученом из пула потоков, то есть создаваться не будет новый поток. Короче это более производительно, но не во всех случаях, если выполнять ну очень много долгосрочных операций, то это может сказаться чуток на производительности.
Лучше об этом прочитать:
BackgroundWorker - класс
ThreadPool - класс

Последний раз редактировалось Casper-SC; 22.06.2011 в 17:33.
Casper-SC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчёта (отредактировать код) Deis C++ Builder 1 05.03.2011 02:01
Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается mnbvcxz11 Общие вопросы Delphi 3 22.08.2009 11:29
таймер. откоментируйте код, плиз Dimarik Общие вопросы C/C++ 9 09.07.2009 20:29
Проблемы поток+таймер, вопрос см в нутри Des Общие вопросы Delphi 5 03.05.2009 14:27