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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# функция работающая в отдельном потоке, пример дайте пожалуйста 
:(
    Опции темы
Rockie
Дата 1.9.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Здравствуйте! 

1) У меня есть форма Form1, на ней label1. есть функция, которая прорисовывает на label текущее время. Хочу запустить ее в отдельном потоке. Чтобы один поток опрашивал системный таймер и прорисовывал время на label, а основной чтобы реагировал на действия пользователя(слушал щелчки мышью и т.п.). Вот тут вроде хороший пример, но у меня он не работает как написано(все цифры по порядку), и там как понял создаются два потока, а мне нужен только один - "побочный", для таймера.. 
Вот пример кода:

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Forms;

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

        private void ShowTimerIntoLabel(Label label)
        {
            label.Text =  DateTime.Now.Hour + "." +
                        + DateTime.Now.Minute + "." +
                          DateTime.Now.Second;
        }

    }
}


2) Можно ли регулировать приоритеты потоков? То есть чтобы одному отводилось меньшее процессорное время, а другому - большее?

3) Где доступно на русском описана работа с потоками в .NET 2.0, если можно ссылки?




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
QryStaL
Дата 1.9.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


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

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



1) Кидаешь на форму компонент таймер, ставишь ему интервал 1000. Добавляешь обработчик события Tick.

Код

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.label1.Text = DateTime.Now.ToString("HH:mm:ss");
        }
    }


2) Свойство Thread.Priority.

3) Основы - Троелсен, Рихтер. Более подробно и углубленно - на английском (есть целые книги, посвященные этой теме, в том числе и МСДН).


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Rockie
Дата 1.9.2007, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



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




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
anonym
Дата 1.9.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пример работы с классом Thread

Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication2
{
    class Program
    {
        private static void PrintNumbers()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(1000);
            }
        }

        static void Main(string[] args)
        {
            Thread th = new Thread(new ThreadStart(PrintNumbers));
            th.Start();            
            Console.WriteLine("Main thread");            
        }
    }
}

PM MAIL   Вверх
tol05
Дата 2.9.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



добавлю ко всему выше сказанному smile

Rockie, пример anonym - классический. Юзай. Только в версии 2.0 появилась возможность кроме делегата ThreadStart юзать еще ParameterizedThreadStart, чему нельзя не радоваться. Можно передавать параметры в поток (создавая массив object[] и упаковывая в него сколько угодно много параметров)...

Кроме того, есть еще пул потоков ThreadPool, для WinForms - компонент BackgroundWorker.
Для выполнения асинхронных операций также есть целая модель АРМ (тут, как сказал QryStaL, действительно лучше всего - Рихтера читать). А попростому - если видишь метод, начинающийся с BeginXXXXXX или EndXXXXXX - то это как раз APM.

ну а для начала можно почитать :
http://rsdn.ru/ (статья "Работа с потоками в C#")
http://www.intuit.ru/department/pl/cil/15/

 



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Rockie
Дата 2.9.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Понял, буду разбираться! smile Всем по репе, спасибо! 




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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