Ваш код не работает, потому что myCaller
не установлен для вашего конкретного экземпляра ThisAddIn
(теоретически, может быть много ThisAddIn
экземпляров, плавающих в вашей памяти).
Однако, поскольку вы разрабатываете надстройку для офиса, на самом деле существует только один экземпляр ThisAddIn. Простой обходной путь для доступа к таймеру - сделать Timer1 общей переменной:
Friend Shared WithEvents Timer1 As System.Timers.Timer
Это позволит вам получить доступ к таймеру как ThisAddIn.Timer1
.
(Обратите внимание, что в общем случае , общедоступные общие поля (или глобальные переменные) - плохая идея. Однако в вашем случае это может быть просто самое простое решение, которое позволяет вам делать то, что вы хочет.)
PS: Возможно, вы захотите узнать разницу между классом и экземпляром класса .
РЕДАКТИРОВАТЬ : Поскольку к таймеру подключен обработчик событий, вы либо
(a) необходимо также предоставить общий доступ к обработчику событий (Private Shared Sub Timer1_Elapsed...
), что имеет недостаток, заключающийся в том, что ваш обработчик событий больше не может обращаться к переменным экземпляра ThisAddIn, или
(b) Сделайте экземпляр ThisAddIn
доступным через отдельное свойство вместо того, чтобы сделать поле общим:
Public Class ThisAddIn
Friend WithEvents Timer1 As System.Timers.Timer
Private Shared _instance As ThisAddIn
Public ReadOnly Shared Property Instance() As ThisAddIn
Get
Return _instance
End Get
End Property
Private Sub ThisAddIn_Startup() Handles Me.Startup
_instance = Me
Me.Timer1 = New System.Timers.Timer()
Me.Timer1.Interval = 500
Me.Timer1.Enabled = True
End Sub
...
Public Class ServerRibbon
Private Sub respondToClick()
ThisAddIn.Instance.Timer1.Enabled = True
End Sub
End Class