Страница: 1 |
Страница: 1 |
Вопрос: Резидентная задача- как сделать?
Добавлено: 05.08.04 17:29
Автор вопроса: Barulya
Смысл в том,что в своей программе я хочу использовать модуль, который будет работать как инспектор всех задач поставленных через главную программу, т.е. аналог задач OutLook'а (через определенный период времени сверялся с базой данных не подгружая основных форм, но использовал иконку в трее), причем основное требование, чтобы данный модуль работал независимо от основной программы (запущена она или нет) и занимал минимум системных ресурсов. Подскажите как это сделать??
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #1
Добавлено: 05.08.04 17:37
Написать windows-сервис... Однако будут сложности с интерфейсом.
А можно ограничиться обычным Windows Application.
Номер ответа: 2
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #2
Добавлено: 05.08.04 17:44
Ну если я, допустим, буду использовать обычное WindowsApplication, то мне придется использовать форму и привязывать к ней таймер, а также весь остальной инструментарий. Можно ли без загрузки формы первоначально использовать просто таймер и рекурсивно запускать приложение?
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 05.08.04 17:50
Можно.
ЯПо
Можно. Пользуйтесь таймером из пространства имен System.Threading. Он
не требует наличия формы, так как основан не на оконных сообщениях.
Номер ответа: 4
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #4
Добавлено: 05.08.04 17:53
Как??
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 05.08.04 17:57
Сорри за формат предыдущего сообщения: почтовик сглючил
Вот пример использования таймера:
Imports System
Imports System.Threading
Class TimerExampleState
Public counter As Integer = 0
Public tmr As Timer
End Class 'TimerExampleState
Class App
Public Shared Sub Main()
Dim s As New TimerExampleState()
' Create the delegate that invokes methods for the timer.
Dim timerDelegate As New TimerCallback(AddressOf CheckStatus)
' Create a timer that waits one second, then invokes every second.
Dim timer As New Timer(timerDelegate, s, 1000, 1000)
' Keep a handle to the timer, so it can be disposed.
s.tmr = timer
' The main thread does nothing until the timer is disposed.
While Not (s.tmr Is Nothing)
Thread.Sleep(0)
End While
Console.WriteLine("Timer example done.")
End Sub 'Main
' The following method is called by the timer's delegate.
Shared Sub CheckStatus(state As [Object])
Dim s As TimerExampleState = CType(state, TimerExampleState)
s.counter += 1
Console.WriteLine("{0} Checking Status {1}.", DateTime.Now.TimeOfDay, s.counter)
If s.counter = 5 Then
' Shorten the period. Wait 10 seconds to restart the timer.
s.tmr.Change(10000, 100)
Console.WriteLine("changed...")
End If
If s.counter = 10 Then
Console.WriteLine("disposing of timer...")
s.tmr.Dispose()
s.tmr = Nothing
End If
End Sub 'CheckStatus
End Class 'App
Номер ответа: 6
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #6
Добавлено: 05.08.04 18:02
что-то не понятно в чем проблема...
создаете программу с одним модулем
Module Module1
Public Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll"
(ByVal handle As IntPtr, ByVal minimumWorkingSetSize%, ByVal
maximumWorkingSetSize As Boolean
Sub main()
Dim t As New NotifyIcon
t.Icon = New Icon("...")
t.Visible = True
Dim cm As New ContextMenu
cm.MenuItems.Add(New MenuItem("Close", New EventHandler(AddressOf Click)))
t.ContextMenu = cm
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Hand
le, -1, -1)
Try
Application.Run()
Catch ex As Exception
Finally
t.Dispose()
End Try
End Sub
Sub Click(ByVal sender As Object, ByVal e As EventArgs)
Application.Exit()
End Sub
End Module
поуберайте ненужные референсы, а форму для таймера вовсе необязательно
создавать, вообщето есть три вида таймеров...