使用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窗体样式的应用程序使用相同的串行端口参数和相同的设备工作正常。据我所知,这个问题是关于幻灯片演示的焦点(我猜资源可用性?)。
我要使用任务并行库来尝试我的运气,但如果任何人有任何洞察力,为什么存在上述疯狂的问题请开导我(注意:相对新手程序员,所以如果有一个明显的错误在我的方法中,请让我知道)。谢谢。