我的vb.net 4.0项目是内部交易平台。DatagridView在更新时崩溃应用程序导致滚动条出现
称为MsgPad一个单独的形式含有一个DataGridView称为MsgPadDG。
表单加载 sub做了两件事:格式化datagridview并为gridview刷新定义一个计时器。
第二子,UpdateMyMsg,通过NewMessage作为事件手段接收来自螺纹UIUpdaterEngine更新,并更新MyMessages对象(本质上是一个数据表)。
第三个子分区UpdateMdgPadDGW使用invoke方法更新/刷新datagridview(可能不是必须的,因为定时器是在UI线程中定义的)。
最后在DataGridView属性:行被定义为不用户可编辑的,AutoSizeRowsMode = Displayedcells和滚动条=两个。
我的问题是,当更新过程添加行超出datagridview的限制,导致滚动条出现时,整个应用程序崩溃。 我尝试了没有计时器(直接在UpdateMyMsg Sub中调用数据源更新),但是问题始终存在。 奇怪的事情:Try-Catch块没有捕捉任何东西。
预先感谢您的重播。
爱德华多
这里来了CODE:
Public Class MsgPad
Private WithEvents _MyUIUpdaterEngine As MyUIUpdaterEngine = MyUIUpdaterEngine.Instance
Private MyMessages As New Messages
Private LastUpdate As DateTime = TimeValue("08:00:00")
Private ObjLock As New Object
Private NewMessages As Boolean = False
Dim UpdateDGWTimer As New System.Timers.Timer
Private Sub MsgPad_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
'--
MsgPadDG.DataSource = MyMessages.DTable
'--
With MsgPadDG
'--
.Columns("Msg_ID").Visible = False
.Columns("I_CommandID").Visible = False
.Columns("B_ID").Visible = False
.Columns("F_ID").Visible = False
.Columns("T_TV").Visible = False
.Columns("T_Sign").Visible = False
.Columns("T_Mde").Visible = False
.Columns("T_QU").Visible = False
.Columns("T_QI").Visible = False
.Columns("T_QF").Visible = False
.Columns("T_PI").Visible = False
.Columns("T_PF").Visible = False
'--
.Columns("Msg_RecDate").HeaderText = "Date"
.Columns("Msg_RecDate").Width = 50
.Columns("Msg_RecDate").DefaultCellStyle.Format = "HH:mm:ss"
.Columns("I_Symbol").HeaderText = "Symbol"
.Columns("I_Symbol").Width = 80
.Columns("I_Des").HeaderText = "Des"
.Columns("I_Des").Width = 180
.Columns("Msg_Text").HeaderText = "Message"
.Columns("Msg_Text").Width = 250
'--
End With
'--Crea timer per l'Update del DAtagridView
AddHandler UpdateDGWTimer.Elapsed, AddressOf UpdateMsgPadDGW
UpdateDGWTimer.Interval = 3500
UpdateDGWTimer.Enabled = True
.....
.....
End Sub
Private Sub UpdateMyMsg(ByVal CRec As OrderRecord, ByVal Msg As String) Handles _MyUIUpdaterEngine.NewMessage
Try
SyncLock ObjLock
'--Aggiorna la tabella MyMessages
MyMessages.Add(CRec, Msg)
NewMessages = True
'--Parla messaggio
Dim synth As New SpeechSynthesizer
Dim TalkMsg As String = Msg
If CRec.I_Des <> Nothing Then TalkMsg += " su: " + CRec.I_Des
synth.SpeakAsync(TalkMsg)
End SyncLock
.....
.....
End Sub
Private Sub UpdateMsgPadDGW(source As Object, e As ElapsedEventArgs)
'--Aggiorna MesssagePad
Try
SyncLock ObjLock
If NewMessages Then
MsgPadDG.ControlInvoke(Sub(l)
MsgPadDG.DataSource = MyMessages.DTable
MsgPadDG.Refresh()
MsgPadDG.ClearSelection()
End Sub)
NewMessages = False
End If
End SyncLock
.....
.....
End Sub
究竟是哪条线坠毁?或者是不可能通过它? – WozzeC
很奇怪,try-catch没有捕获任何东西,错误没有记录。 我怀疑它绑定或刷新崩溃: ** MsgPadDG.ControlInvoke(Sub(l) MsgPadDG.DataSource = MyMessages。DTable MsgPadDG.Refresh() MsgPadDG.ClearSelection() 完子)** – Platypus