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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2012, 18:35   #11
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

да примерно так) тока надо помоему добавить join
Код:
th1.Abort();
th1.Join();
точно такой же примерчик с таймером
Код:
        
 using System.Threading;
...
        private Timer _refreshTimer;

        private void button3_Click(object sender, EventArgs e)
        {
            if (_refreshTimer == null)
            {

                _refreshTimer = new Timer(ProgressTimerCallback, null, 0, 1 * 1000);
            }

        }

        public void ProgressTimerCallback(object state)
        {
                this.InvokeEx(() => { button3.Text = DateTime.Now.ToString(); });

        }
для работы с invoke всегда во всех проектах тягаю такие вот методы
Код:
public static class ControlExtensions
    {
        public static TResult InvokeEx<TControl, TResult>(this TControl control, Func<TControl, TResult> func)
            where TControl : Control
        {

            try
            {
                return control.InvokeRequired ? (TResult)control.Invoke(func, control) : func(control);
            }
            catch
            {
                return default(TResult);
            }


        }

        public static void InvokeEx<TControl>(this TControl control,
                                              Action<TControl> func)
            where TControl : Control
        {
            control.InvokeEx(c => { func(c); return c; });
        }

        public static void InvokeEx<TControl>(this TControl control, Action action)
            where TControl : Control
        {
            control.InvokeEx(c => action());
        }
    }
Reskov вне форума Ответить с цитированием
Старый 14.06.2012, 03:44   #12
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

После использования вашего кода, вылетает ошибка:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace SuperTimer
{
    public partial class Form1 : Form
    {
        private Timer _refreshTimer;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (_refreshTimer == null)
            {

                _refreshTimer = new Timer(ProgressTimerCallback, null, 0, 1 * 1000);
            }
        }
        public void ProgressTimerCallback(object state)
        {
                this.InvokeEx(() => { button1.Text = DateTime.Now.ToString(); });
        }
    }
}
Ошибка в строке
Код:
private Timer _refreshTimer;
: 'Timer' is an ambiguous reference between 'System.Windows.Forms.Timer' and 'System.Threading.Timer'
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 14.06.2012, 04:20   #13
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Не могли бы вы написать очень простенький пример, где загружается форма, в которой можно что то делать, но в это время отслеживается время, если время ,к примеру, равно 10:10, то появляется MessageBox, при этом время продолжает отслеживаться, до выхода из программы. Очень сильно поможете, с этими потоками у меня большие трудности, очень выручите.
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 14.06.2012, 12:38   #14
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от DENIS_POLOTSK Посмотреть сообщение
Не могли бы вы написать очень простенький пример, где загружается форма, в которой можно что то делать, но в это время отслеживается время, если время ,к примеру, равно 10:10, то появляется MessageBox, при этом время продолжает отслеживаться, до выхода из программы. Очень сильно поможете, с этими потоками у меня большие трудности, очень выручите.
прочитайте полностью тему.
Lime вне форума Ответить с цитированием
Старый 14.06.2012, 12:54   #15
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Писал очень поздно, голова уже не соображала, написал такой код с помощью таймера:
Код:
 private void CurTime_Tick(object sender, EventArgs e)
        {
            try
            {
                int indexOfsob = 1;
                Alarm AlarmForm = new Alarm();
                int CurHour = DateTime.Now.Hour;
                int CurMinute = DateTime.Now.Minute;
                string currentDay = CurData.ToString();
                string currentMonth = CurMonth.ToString();
                string currentYear = CurYear.ToString();
                System.Xml.XmlReader xr = System.Xml.XmlTextReader.Create("D://mylinqxml.xml");
                while (xr.Read())
                {
                    if (xr.IsStartElement())
                    {
                        if (xr.Name == "Sobitie")
                        {
                            xr.MoveToAttribute(0);
                            string attribData = xr.Value;
                            xr.MoveToAttribute(1);
                            string attribTime = xr.Value;
                            xr.MoveToAttribute(2);
                            string attribSob = xr.Value;
                            if ((CurHour.ToString() + ":" + CurMinute.ToString()) == attribTime)
                            {
                                if (currentDay + "." + currentMonth + "." + currentYear == attribData)
                                {
                                    AlarmForm.richTextBox1.Text += indexOfsob.ToString() + ")   " + attribSob + "\n";
                                    indexOfsob++;
                                    AlarmForm.Show();
                                }
                            }
                        }
                    }
                }
                xr.Close();
            }
            catch (XmlException Ex)
            { MessageBox.Show("Xml файл повреждён", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
        }
Как сделать тоже самое, но с помощью потоков?
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 14.06.2012, 13:10   #16
Hexy
 
Аватар для Hexy
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

@DENIS_POLOTSK :
вот набросал пример, что непонятно пишите, но я всё прокомментировал.
VS 2010 .NET FRAMEWORK 4.0
тык
Hexy вне форума Ответить с цитированием
Старый 14.06.2012, 13:43   #17
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
По умолчанию

Спасибо за помощь, но с таймером я уже разобрался. Хотелось бы сделать тоже самое, но с помощью потоков.
DENIS_POLOTSK вне форума Ответить с цитированием
Старый 14.06.2012, 14:05   #18
Hexy
 
Аватар для Hexy
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

Код:
string attribTime;
        string attribData;
        string attribSob;
        int indexOfsob = 1;
        private void CurTime_Tick(object sender, EventArgs e)
        {
            try
            {
                int CurHour = DateTime.Now.Hour;
                int CurMinute = DateTime.Now.Minute;
                string currentDay = DateTime.Now.Day.ToString();
                string currentMonth = DateTime.Now.Month.ToString();
                string currentYear = DateTime.Now.Year.ToString();
                System.Xml.XmlReader xr = System.Xml.XmlTextReader.Create("D://mylinqxml.xml");
                while (xr.Read())
                {
                    if (xr.IsStartElement())
                    {
                        if (xr.Name == "Sobitie")
                        {
                            xr.MoveToAttribute(0);
                            attribData = xr.Value;
                            xr.MoveToAttribute(1);
                            attribTime = xr.Value;
                            xr.MoveToAttribute(2);
                            attribSob = xr.Value;
                            new System.Threading.Thread(CurTimeCheck).Start();
                        }
                    }
                }
                xr.Close();
            }
            catch (System.Xml.XmlException Ex)
            {
                MessageBox.Show("Xml файл повреждён", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        private void CurTimeCheck()
        {
            if ((DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString()) == attribTime)
            {
                if (DateTime.Now.Day.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Year.ToString() == attribData)
                {
                    System.Windows.Forms.MessageBox.Show(indexOfsob.ToString() + ")   " + attribSob + "\n");
                    indexOfsob++;
                    return;
                }
            }
        System.Threading.Thread.Sleep(1000);
        CurTimeCheck()
        }
теперь я вас ненавижу - могли бы предупредить что Alarm - какойто импортнутый класс, ибо я долго пытался понять почему он не парсится.
Hexy вне форума Ответить с цитированием
Старый 14.06.2012, 18:42   #19
DENIS_POLOTSK
Пользователь
 
Регистрация: 28.05.2012
Сообщений: 29
Радость

Я думал, будет понятно, что AlarmForm это форма
DENIS_POLOTSK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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