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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 22:56   #1
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию Работа с текущим временем

Здравствуйте, пишу программу напоминания на рабочий стол. Указывается время, в которое должно происходить напоминание, как постоянно отслеживать время, и в заданное время, вывести форму с напоминанием(время с точностью до минут).
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 12.06.2012, 01:42   #2
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Timer, DateTime.now
Lime вне форума Ответить с цитированием
Старый 12.06.2012, 02:14   #3
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

А можно сделать при помощи потоков? Если можно, то как?
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 12.06.2012, 02:45   #4
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

в потоке:

System.Threading.Thread.Sleep(60*10 00);
проверка даты и времени
Lime вне форума Ответить с цитированием
Старый 12.06.2012, 02:53   #5
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Этим кодом раз в 60 секунд проверять будет? В проверке времени что писать?
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 12.06.2012, 03:15   #6
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Lime Посмотреть сообщение
в потоке:

System.Threading.Thread.Sleep(60*10 00);
проверка даты и времени
Использую такой код:
Код:
private void Form1_Activated(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(60*1000);
            var hour = DateTime.Now.Hour;
            var min = DateTime.Now.Minute;
            if (hour == 2)
                return;
        }
Программа как бы виснет, ничего не происходит. Что делать?
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 12.06.2012, 12:02   #7
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Ну конечно она будет выснуть вы же усыпили, тот же поток) используйте Threading. timer
Код:
using System.Threading;
private Timer _refreshTimer;
 public void EnableProgressUpdates(int progressRefreshTime)
        {
            if (_refreshTimer == null)
            {
                _refreshTimer = new Timer(ProgressTimerCallback, null, Timeout.Infinite, Timeout.Infinite);
            }

            _refreshTimer.Change(0, progressRefreshTime * 1000);
        }
ну либо
Код:
new Thread() бла бла бла.Start() ну или BackgroundWorker или TaskFactory c атрибутом LongRunning
а еще можно использовать библиотеку Quartz
а еще можно просто добавлять запись в Windows Task Sheduler
Reskov вне форума Ответить с цитированием
Старый 12.06.2012, 12:10   #8
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Необходимо сделать так:
Постоянно в потоке должно отслеживаться текущее время, если время из ячейки DataGridView, соответствует текущему, то вывести форму с напоминанием, время продолжает отслеживаться...
Мне сказали программисты, что: "с отдельным потоком вы так не сделаете. Так как там проблематично обращение к UI элементам". То, есть забыть про потоки? или вы могли бы мне помочь?
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 12.06.2012, 13:13   #9
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
Постоянно в потоке должно отслеживаться текущее время
это я хз че и как) и зачем) к UI все норм обращаться, дело в том что все UI находиться в одном потоке, и для отрисовки метод должен быть вызван в том же потоке, но Control Invoke и InvokeRequired решает эту проблему. Так а чем вам код не подходит который я скинул, Timer он тоже в другом потоке... вообще варантов много... спросите конкретно)
Цитата:
new Thread() бла бла бла.Start()
явно через потоки, все остальные описанные мной варианты тоже испольщзуют потоки, ну а как иначе=)
Reskov вне форума Ответить с цитированием
Старый 12.06.2012, 13:22   #10
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread th1 = new Thread(new ThreadStart(CheckDate));
            th1.Start();
            Console.WriteLine("60sec timer. Нажатие кнопки остановит таймер.");
            Console.ReadKey();
            th1.Abort();
            Console.WriteLine("timer остановлен. Нажатие кнопки завершит программу");
            Console.ReadKey();
            

        }
        private static void CheckDate()
        {
            while (true)
            {
                System.Threading.Thread.Sleep(60 * 1000);
                if (DateTime.Now == DateTime.Now)
                {
                    MessageBox.Show("Оповещение");
                }
            }
        }
    }
}

Последний раз редактировалось Lime; 12.06.2012 в 13:28.
Lime вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с временем na40 Microsoft Office Excel 2 12.05.2012 19:21
Работа со временем ZoxWatt Паскаль, Turbo Pascal, PascalABC.NET 6 19.02.2012 17:04
Работа с временем. celovec Общие вопросы Delphi 7 08.04.2011 18:29
Работа со временем в C++ +As+ Помощь студентам 1 02.09.2008 21:17
Работа со временем joker Общие вопросы Delphi 4 20.04.2008 15:01