16,554
社区成员
发帖
与我相关
我的任务
分享
Public Class dxt_Service
Public WithEvents SendTimer As System.Timers.Timer '定时发送计时器
Public Sub New()
'初始化计时器
SendTimer = New System.Timers.Timer(3000)
With SendTimer
.AutoReset = True
End With
End Sub
Private Sub SendTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles SendTimer.Elapsed
smutex.WaitOne()
SendTimer.Stop()
Try
SendMessage()
Catch comex As COMException
Throw comex
Catch ex As Exception
Throw ex
End Try
SendTimer.Start()
smutex.ReleaseMutex()
End Sub
Imports System.Threading
Public Class Form1
Dim tm As Threading.Timer
Shared manualWork As New AutoResetEvent(False)
Shared manualElapsed As New AutoResetEvent(False)
Dim bolExit As Boolean = False
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
bolExit = True
manualWork.Set()
manualElapsed.Set()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim td As New Threading.Thread(AddressOf work)
td.SetApartmentState(ApartmentState.STA)
td.Start()
'3秒之后启动定时器,并间隔3秒触发。采用的是线程池中的线程
tm = New Threading.Timer(New TimerCallback(AddressOf Elapsed), Nothing, 3000, 3000)
Console.WriteLine("main id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss"))
End Sub
Sub work()
Dim bolResult As Boolean = False
While bolExit = False
bolResult = manualWork.WaitOne()
''do something
Thread.Sleep(5000)
Console.WriteLine("work id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss"))
manualElapsed.Set()
End While
End Sub
Sub Elapsed()
tm.Change(Timeout.Infinite, Timeout.Infinite)
manualWork.Set()
manualElapsed.WaitOne()
If bolExit = False Then
tm.Change(3000, 3000)
Else
manualWork.Set()
End If
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim td As New Threading.Thread(AddressOf work)
td.Start()
Catch ex As Exception
MsgBox("form----" + ex.ToString)
End Try
End Sub
Sub work()
Try
Throw New Exception("hello")
Catch ex As Exception
MsgBox("thread ----" + ex.ToString)
End Try
End Sub
End Class
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true" />
</runtime>
</configuration>
Imports System.Threading
Public Class Form1
Dim tm As Threading.Timer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'3秒之后启动定时器,并间隔3秒触发。采用的是线程池中的线程
tm = New Threading.Timer(New TimerCallback(AddressOf work), Nothing, 3000, 3000)
Console.WriteLine("id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss"))
End Sub
Sub work(ByVal obj As Object)
Console.WriteLine("Begin -->" + "id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss"))
'停止定时器
tm.Change(Timeout.Infinite, Timeout.Infinite)
System.Threading.Thread.Sleep(5000)
Console.WriteLine(My.Computer.Clock.LocalTime.ToString("id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss")))
'重新启动
tm.Change(3000, 3000)
Console.WriteLine("Stop -->" + "id :" + Thread.CurrentThread.ManagedThreadId.ToString + "----" + DateTime.Now.ToString("hh:mm:ss"))
End Sub
End Class
Public Sub SendMessage()
Dim db As New dxtdbEntities
Dim waiting = dxt.MessageState.Waiting.ToString
Dim msgs = From a In db.tabMessage Where a.State = waiting Order By a.BornTime Descending
If msgs.Any Then
For Each dxt_msg In msgs
If (Now - dxt_msg.BornTime).TotalHours > 3 Then
dxt_msg.State = dxt.MessageState.TimeOver.ToString
Else
dxt_msg.State = MessageState.Posting.ToString
Dim empplog As New EmppLog
empplog.Msg = <SendMessage>
<msgid><%= dxt_msg.id %></msgid>
<Telephones><%= dxt_msg.Telephones.ToString %></Telephones>
<Message><%= dxt_msg.Message %></Message>
</SendMessage>.ToString
empplog.Time = Now
db.AddToEmppLog(empplog)
Try
db.SaveChanges()
Catch ex As Exception
End Try
Open()
'发送短信开始
Dim msg As New EMPPLib.ShortMessage
Dim mobiles As New EMPPLib.Mobiles
mobiles.Add(dxt_msg.Telephones)
msg.DestMobiles = mobiles
msg.content = dxt_msg.Message
msg.needStatus = dxt_msg.NeedStatus '需要状态报告
dxt_msg.dxtServerDataReference.Load()
msg.ServiceID = dxt_msg.dxtServerData.Account 'ServiceID值
msg.srcID = dxt_msg.dxtServerData.Sender
msg.SequenceID = dxt_msg.id
msg.SendNow = dxt_msg.SendNow
If Not dxt_msg.SendNow Then msg.atTime = dxt_msg.AtTime
SyncLock emppctl
emppctl.needStatus = dxt_msg.NeedStatus '需要状态报告
emppctl.submit(msg)
End SyncLock
mobiles = Nothing
msg = Nothing
'发送短信结束
End If
Next
End If
End Sub