【发布时间】:2014-12-12 01:40:41
【问题描述】:
使用 VS2012 (.NET) 我正在为 PowerPoint (2010) 开发功能区栏样式插件,我希望传入的串行端口值通过算法传递,并根据输出执行诸如下一张幻灯片或上一张幻灯片。我正在使用 SerialPort.DataReceived 事件处理程序。
使用迭代变量 j 可以更简单地解释我的问题,每次调用 SerialPort.DataReceived 事件处理程序时,该变量的值都会增加 1。我将在代码之后详细说明问题,但简而言之,一旦我的代码被调用 j,在幻灯片演示开始之前,价值就会按预期增加和 30 秒左右的幻灯片演示。处于演示模式大约 30 秒后,j 停止迭代。我正在使用 Breakpoint When Hit 和调试输出窗口查看 j 的值。
在一个类(class2)中,与通过单击功能区按钮启动的表单相关联,在所述表单中单击按钮会设置 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
在主类(class1)中,我有 DataReceived Handler 和迭代变量 j(同样,相关代码的缩写):
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+tab 将焦点放在另一个应用程序上,比如 VS,j 将毫无问题地进行迭代(PowerPoint 仍处于演示模式)。如果我开始幻灯片演示并让它获得焦点 j 将在大约 30 秒后停止迭代,无论我在开始幻灯片演示之前让 j 迭代多长时间。
我也尝试使用后台工作程序而不是串行端口事件处理程序,在其中我使用 do 循环从串行端口获取数据,但我遇到了同样的问题;在幻灯片演示运行约 30 秒之前按预期工作。
我已经使用相同的串行端口参数和相同的设备编写了两个独立的 Windows 窗体样式应用程序,它们工作正常。据我所知,问题在于幻灯片演示具有焦点(我猜资源可用性?)。
我将使用 Task Parallel 库来试试运气,但如果有人对为什么存在上述令人抓狂的问题有任何见解,请赐教(注意:相对新手程序员,所以如果出现明显的错误我的方法也请告诉我)。谢谢。
【问题讨论】:
标签: vb.net serial-port powerpoint add-in