使用VS2012(.NET)我正在開發一個適用於PowerPoint(2010)的功能區欄樣式外接程序,我希望傳入的串行端口值可以通過算法傳遞,輸出,執行諸如下一張幻燈片或上一張幻燈片之類的動作。我正在使用SerialPort.DataReceived事件處理程序。SerialPort.DataReceived事件在PowerPoint幻燈片放映中停止
我的問題更簡單地使用迭代變量j來解釋,每次調用SerialPort.DataReceived事件處理函數時,它的值增加1。我將在代碼後更詳細地說明問題,但總而言之,一旦我的代碼被稱爲j在幻燈片展示的前30秒左右幻燈片展示開始前和的預期值增加。在演示模式下約30秒後,停止迭代。我正在使用「點擊時斷點」和「調試輸出」窗口觀察值j。
在一個類(等級2),通過單擊功能區按鈕推出了表單關聯,點擊一個按鈕在上述的形式設置SerialPort.DataReceived處理程序,並打開串口(簡稱相關的代碼):
Public Class class2 'called by clicking ribbon button
Public sp As New SerialPort
Public Baud As Integer = 9600
Public Port As String
Public c1 As class1
Public Sub New(oParent As class1) 'get reference to parent class
c1= oParent
InitializeComponent()
End Sub
....
Public Sub btn1_Click(sender As Object, e As EventArgs) _
Handles btn1.Click
Port = lbCom.SelectedItem 'Port selected from form listbox
Try
With sp
.BaudRate = Baud
.PortName = Port
.ReadTimeout = 5000 'Give serial port 5sto open
.RtsEnable = True
End With
c1.mySP = sp
AddHandler sp.DataReceived, AddressOf c1.spDataReceivedHandler
sp.Open()
Me.Hide()
Catch ex As Exception
MsgBox("Error", vbOKOnly, "Connection Error")
End Try
End Sub
End Class
在主類(1類)我有DataReceived處理器和迭代變量Ĵ(再次,縮寫相關的代碼):
Public Class class1
...
Public Sub spDataReceivedHandler(ByVal sender As Object, _
e As SerialDataReceivedEventArgs)
j = j + 1 ' value monitored using Breakpoint When Hit
End Sub
End Class
更多有關該問題的細節。一旦我開始我的代碼,如果我不開始幻燈片演示文稿j將迭代沒有任何問題(5 +分鐘)。如果我開始播放幻燈片演示文稿,但立即點擊alt +選項卡將焦點放到另一個應用程序上,比如說VS,j將無任何問題地迭代(PowerPoint仍處於演示模式)。如果我開始幻燈片演示並讓其具有焦點j將在約30秒後停止迭代,無論我在開始幻燈片演示之前多長時間迭代一次。
我也嘗試過使用後臺工作器而不是串口事件處理程序,我使用do循環從串口獲取數據,但遇到同樣的問題;按預期工作,直到幻燈片演示文稿已運行約30秒。
我已經寫了兩個獨立的Windows窗體樣式的應用程序使用相同的串行端口參數和相同的設備工作正常。據我所知,這個問題是關於幻燈片演示的焦點(我猜資源可用性?)。
我要使用任務並行庫來嘗試我的運氣,但如果任何人有任何洞察力,爲什麼存在上述瘋狂的問題請開導我(注意:相對新手程序員,所以如果有一個明顯的錯誤在我的方法中,請讓我知道)。謝謝。