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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер, проблемы с таймаром 
:(
    Опции темы
Maximus123
Дата 20.11.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот вообщем сделал форму которая регионом выводит часики на рабочем столе, и все былобы прекрасно если бы таймер не останавливался!! я так думаю надо сделать так что бы программа работала в фоновом режиме вот терь вопрос как это сделать!!? smile
Добавлено @ 14:43
вот основой текст формы!!! что надо сюда добавить!!?
Код


Imports System.io
Public Class FormOne
    Inherits System.Windows.Forms.Form
    Private IconTrey As System.Windows.Forms.NotifyIcon
    Private timer As System.Timers.Timer
    Private offset As Point
    Private fsize As Integer = 40
    Private txt1 As String = " "
    Private txt As String
    Private ff As String 
    Private popUpMenu As ContextMenu
    Private chkColor As MenuItem
    Private chkFont As MenuItem
    Private chkOnTop As MenuItem
    Private chkOptions As MenuItem
    Private fnt As New Font("times new roman", fsize, FontStyle.Bold)
    Private fd As New System.Windows.Forms.FontDialog
    Private cd As New ColorDialog


    Public Sub New()
        MyBase.New()
        Me.Name = "FrmONE"
        Me.Text = "One"
        Me.FormBorderStyle = FormBorderStyle.None
        Me.ShowInTaskbar = False
        'Me.TopMost = True
        Me.Height = 200
        Me.Width = 500
        txt = 1



    End Sub
    Public Shared Sub main()
        Application.Run(New FormOne)
    End Sub

    Private Sub formONE_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
      
        Dim gp As New System.Drawing.Drawing2D.GraphicsPath
        gp.StartFigure()
        If txtShow = True Then
            gp.AddString(txt1, New FontFamily(ff), fnt.Style, (fsize / 3), New Point(40, fsize + 6), StringFormat.GenericTypographic)
        End If
        gp.AddString(txt, New FontFamily(ff), fnt.Style, fsize, New Point(0, 0), StringFormat.GenericDefault)

        ' gp.AddPath(patch, True)
        Dim rec As New Rectangle(0, 0, MyBase.ClientSize.Width, MyBase.ClientSize.Height)
        Dim patch As New System.Drawing.Drawing2D.GraphicsPath
        patch.AddRectangle(rec)
        Dim pdg As New Drawing2D.PathGradientBrush(patch)
        Dim colors() As Color = {Color.FromArgb(MyBase.BackColor.A, MyBase.BackColor.R, MyBase.BackColor.G, MyBase.BackColor.B)}
        pdg.SurroundColors = colors
        pdg.CenterColor = Color.FromArgb(255, 0, 0, 0)
        pdg.SetSigmaBellShape(0.8F)
        e.Graphics.FillPath(pdg, patch)

        gp.CloseFigure()


        MyBase.Region = New Region(gp)


    End Sub

    Private Sub formONE_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        timer = New System.Timers.Timer
        AddHandler timer.Elapsed, AddressOf onTimedEvent
        timer.Interval = 100
        timer.Enabled = True
        timer.AutoReset = True
        timer.Start()

        Dim file As New FileInfo("max.lom")
        Dim sw As StreamReader = file.OpenText
        Dim q, w, r, t As Integer
        ff = sw.ReadLine
        sw.ReadLine()
        fsize = sw.ReadLine()
        t = sw.ReadLine
        q = sw.ReadLine
        w = sw.ReadLine
        r = sw.ReadLine
        MyBase.BackColor = Color.FromArgb(t, q, w, r)
        q = sw.ReadLine
        w = sw.ReadLine
        MyBase.SetDesktopLocation(q, w)
        timeShow = sw.ReadLine
        DateShow = sw.ReadLine
        sutTime = sw.ReadLine
        txtShow = sw.ReadLine
        cahFix = sw.ReadLine
        errors = sw.ReadLine
        sw.Close()
        IconTrey = New System.Windows.Forms.NotifyIcon
        AddHandler IconTrey.MouseMove, AddressOf icTre_move
        IconTrey.Icon = New Icon("1.ico")
        IconTrey.InitializeLifetimeService()
        IconTrey.Visible = True
        ConstructorPopup()
        SetStyle(ControlStyles.CacheText, True)
        SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        SetStyle(ControlStyles.DoubleBuffer, True)

    End Sub
    Private Sub icTre_move(ByVal sender As Object, ByVal e As MouseEventArgs)
        Dim d As New DateTime
        d = Now
        IconTrey.Text = d.ToLongTimeString & " " & d.ToShortDateString

    End Sub

    Private Sub formONE_unLoad(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        Dim file As New FileInfo("max.lom")
        Dim sw As StreamWriter = file.CreateText
        sw.WriteLine(fnt.FontFamily.Name)
        sw.WriteLine(fnt.Style)
        sw.WriteLine(fsize)
        sw.WriteLine(MyBase.BackColor.A)
        sw.WriteLine(MyBase.BackColor.R)
        sw.WriteLine(MyBase.BackColor.G)
        sw.WriteLine(MyBase.BackColor.B)
        sw.WriteLine(MyBase.DesktopLocation.X)
        sw.WriteLine(MyBase.DesktopLocation.Y)
        sw.WriteLine(timeShow)
        sw.WriteLine(DateShow)
        sw.WriteLine(sutTime)
        sw.WriteLine(txtShow)
        sw.WriteLine(cahFix)
        sw.WriteLine(errors)
        sw.Close()
    End Sub
    Public Sub ConstructorPopup()
        popUpMenu = New ContextMenu
        popUpMenu.MenuItems.Add("Цвет", New EventHandler(AddressOf popup))
        popUpMenu.MenuItems.Add("Шрифт", New EventHandler(AddressOf popup))
        popUpMenu.MenuItems.Add("-", New EventHandler(AddressOf popup))
        popUpMenu.MenuItems.Add("Всегда с верху", New EventHandler(AddressOf popup))
        popUpMenu.MenuItems.Add("-", New EventHandler(AddressOf popup))
        popUpMenu.MenuItems.Add("Параметры", New EventHandler(AddressOf popup))
        IconTrey.ContextMenu = popUpMenu
        chkColor = IconTrey.ContextMenu.MenuItems(0)
        chkFont = IconTrey.ContextMenu.MenuItems(1)
        chkOnTop = IconTrey.ContextMenu.MenuItems(3)
        chkOptions = IconTrey.ContextMenu.MenuItems(5)
    End Sub
    Private Sub popup(ByVal sender As Object, ByVal e As EventArgs)


        If sender Is chkColor Then
            cd.FullOpen = False
            cd.Color = MyBase.BackColor
            If cd.ShowDialog <> DialogResult.Cancel Then
                MyBase.BackColor = cd.Color
            End If
        End If
        If sender Is chkFont Then
            fd.ShowEffects = True
            fd.MaxSize = 90
            fd.MinSize = 10
            fd.Font = fnt
            If fd.ShowDialog <> DialogResult.Cancel Then
                ff = fd.Font.FontFamily.Name
                fnt = fd.Font
                fsize = fd.Font.Size
                MyBase.Height = fsize * 35
                MyBase.Width = fsize * 35
            End If
        End If
        If sender Is chkOptions Then
            Dim formaOP As New Form1
            formaOP.Show()
        End If
        If sender Is chkOnTop Then
            If chkOnTop.Checked = False Then
                MyClass.TopMost = True
                chkOnTop.Checked = True

            ElseIf chkOnTop.Checked = True Then
                MyClass.TopMost = False
                chkOnTop.Checked = False
            End If
        End If
    End Sub
    Public Sub onTimedEvent(ByVal sourse As Object, ByVal e As System.Timers.ElapsedEventArgs)

        Dim d As New DateTime
        d = Now
        txt = ""
        If timeShow = True Then
            txt = d.ToLongTimeString
        End If
        If DateShow = True Then
            txt = txt & " " & d.ToShortDateString
        End If

        Select Case d.Hour
            Case 6 To 9
                txt1 = "Доброе утро"
            Case 10 To 17
                txt1 = "Добрый день"
            Case 18 To 23
                txt1 = "Добрый вечер"
            Case 0 To 5
                txt1 = "Доброй ночи"
        End Select
        Dim se As New FormOne
        MyClass.Invalidate()
        If sutTime.ToLongTimeString = d.ToLongTimeString And errors = True Then
            Dim ExitWindows As New ExitWindwos
            ExitWindows.ShutDown()
            Me.Close()
            End
        End If
    End Sub
    Private Sub formONE_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
        offset = New Point(-e.X, -e.Y)

    End Sub
    Private Sub formONE_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
        If e.Button = MouseButtons.Left And cahFix = False Then
            Dim pos As Point = Control.MousePosition
            pos.Offset(offset.X, offset.Y)
            MyBase.Location = pos
        End If
        'timer = New System.Timers.Timer
        'AddHandler timer.Elapsed, AddressOf onTimedEvent
        timer.Interval = 100
        timer.Enabled = True
        timer.AutoReset = True
        timer.Start()
    End Sub
    Private Sub frmOne_onDoubleclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.DoubleClick
        MyBase.Close()
    End Sub
    Private Sub InitializeComponent()
        '
        'FormOne
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Name = "FormOne"

    End Sub
    Protected Overloads Overrides Sub dispose(ByVal disposing As Boolean)
        If disposing Then
            MyClass.IconTrey.Dispose()
        End If
        MyBase.Dispose(disposing)
    End Sub

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
    End Sub
End Class[code=vb]


PM MAIL   Вверх
Exception
Дата 20.11.2005, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



То есть останавливался? Почему? И причем тут фоновый режим?
PM   Вверх
Maximus123
Дата 20.11.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну тоесть работает работае и зависает!! тоесть часики перестают обновляться и обычно это происходит когда система например драйвера активизирует ну или чтонить тяжоле запускаеш!!
PM MAIL   Вверх
bankuss
Дата 25.11.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Timer в данном случае не пригоден
PM MAIL   Вверх
Exception
Дата 25.11.2005, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ыыы... а запуск в фоновом потоке не помогает?
PM   Вверх
Maximus123
Дата 2.12.2005, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




bankuss
а что тогда пригодно?
PM MAIL   Вверх
Exception
Дата 4.12.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Run @ 25.11.2005, 20:54)
запуск в фоновом потоке

?
PM   Вверх
almazow
Дата 5.12.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bankuss @ 25.11.2005, 15:32)
Timer в данном случае не пригоден
вполне пригоден и я бы даже сказал что это лучший выбор потому что не надо гемороится с потоками.
Цитата(Maximus123 @ 20.11.2005, 20:27)
тоесть часики перестают обновляться и обычно это происходит когда система например драйвера активизирует ну или чтонить тяжоле запускаеш!!

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

If sutTime.ToLongTimeString = d.ToLongTimeString And errors = True Then

на чтонить типа
Код

If sutTime <= d And errors = True Then


Это сообщение отредактировал(а) almazow - 5.12.2005, 16:06
PM MAIL   Вверх
-Mikle-
Дата 14.12.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



я сталкивался с проблемой остановки System.Timers.Timer
это помоему глюк фреймворка. заменил на ThreadPool (так как мой класс не был компонентом), и все стало нормально. Но в твоем случае, я бы использовал таймер с формы (System.Windows.Forms.Timer поставленный на форму), если я не ошибаюсь, то он не должен отключаться.

И еще, метод Invalidate вызывает событие Paint, в котором ты производишь сравнительно долгие операции, поэтому обновление 10 раз в секунду - это много, и к тому же бесполезно. Ты ведь не отображаешь милисекунды? Поставь значение Interval = 1000, этого тебе хватит с головой! smile


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


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(Mikle @ 14.12.2005, 13:40)
System.Windows.Forms.Timer поставленный на форму

Вроде наоборот надо юзать System.Timers.Timer, т.к. он основан на системном таймере NT-платформы, а Windows.Forms.Timer - на оконных сообщениях.


Maximus123
timer.Interval = 100 - такой интервал обязателен? По идее, достаточно 1000 мс.

Код

        timer.Interval = 100
        timer.Enabled = True
        timer.AutoReset = True
        timer.Start()


в MouseMouse зачем стоит?
Добавлено @ 14:00
Maximus123
Приведи текст всей проги, а то твой код не компилится


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
-Mikle-
Дата 16.12.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(arilou @ 14.12.2005, 16:54)
Вроде наоборот надо юзать System.Timers.Timer, т.к. он основан на системном таймере NT-платформы, а Windows.Forms.Timer - на оконных сообщениях.

ты прав, так и есть... но System.Timers.Timer дает сбои почему-то, сам сталкивался с этим когда писал сервер Автоматизированной Системы Управления Дорожно-транспортным Движением (АСУДД)... Сделал синхронизацию через ThreadPool, и все начало работать без сбоев...


PS:

Цитата(arilou @ 14.12.2005, 16:54)
timer.Interval = 100 - такой интервал обязателен? По идее, достаточно 1000 мс.


Цитата(Mikle @ 14.12.2005, 16:40)
поэтому обновление 10 раз в секунду - это много, и к тому же бесполезно. Ты ведь не отображаешь милисекунды? Поставь значение Interval = 1000, этого тебе хватит с головой!


smile


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


Новичок



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

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



-Mikle-
Цитата
ты прав, так и есть... но System.Timers.Timer дает сбои почему-то, сам сталкивался с этим когда писал сервер Автоматизированной Системы Управления Дорожно-транспортным Движением (АСУДД)... Сделал синхронизацию через ThreadPool, и все начало работать без сбоев...


поподроблее пожалуста если можно исходничек кинь!?
PM MAIL   Вверх
Dmitrivm
Дата 2.4.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



http://support.microsoft.com/default.aspx/kb/842793

Здесь проблема описана.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

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

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


 




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


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

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