2010-05-21 2 views
2

내가이 개 수업을에 실행하기 위해 어떻게해야합니까, 하나는 윈도우 양식 frmMain 수이고 다른 하나는 vb.NET의 클래스 2003가 어떻게 이벤트가 "메인 스레드"

frmMain 수는 실행되는 시작 버튼을 포함 다른 클래스의 모니터 기능. 내 질문은, 수동으로 이벤트 처리기를 추가하는 것입니다 - 이벤트가 실행될 때 "주 스레드"에서 그들을 excute 얻을 수 있습니다. 툴팁 풍선이 트레이 아이콘에서 튀어 나오면 기존 트레이 아이콘에 팝업 대신 두 번째 트레이 아이콘이 표시되기 때문입니다. frmMain에서 풍선 툴팁을 표시하려고하면 기존 트레이 아이콘에 표시되기 때문에 새 스레드에서 이벤트가 발생하기 때문에 확인할 수 있습니다. 당신은,이, UI 스레드에서 대리자 (이벤트)를 실행하지 않습니다 Control.Invoke를 사용할 필요가

Friend Class monitorFolders 
    Private _watchFolder As System.IO.FileSystemWatcher = New System.IO.FileSystemWatcher 
    Private _eType As evtType 

    Private Enum evtType 
     changed 
     created 
     deleted 
     renamed 
    End Enum 

    Friend Sub monitor(ByVal path As String) 
      _watchFolder.Path = path 

      'Add a list of Filter to specify 
      _watchFolder.NotifyFilter = IO.NotifyFilters.DirectoryName 
      _watchFolder.NotifyFilter = _watchFolder.NotifyFilter Or IO.NotifyFilters.FileName 
      _watchFolder.NotifyFilter = _watchFolder.NotifyFilter Or IO.NotifyFilters.Attributes 

      'Add event handlers for each type of event that can occur 
      AddHandler _watchFolder.Changed, AddressOf change 
      AddHandler _watchFolder.Created, AddressOf change 
      AddHandler _watchFolder.Deleted, AddressOf change 
      AddHandler _watchFolder.Renamed, AddressOf Rename 

      'Start watching for events 
      _watchFolder.EnableRaisingEvents = True 
    End Sub 
    Private Sub change(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs) 
     If e.ChangeType = IO.WatcherChangeTypes.Changed Then 
     _eType = evtType.changed 
      notification() 
     End If 
     If e.ChangeType = IO.WatcherChangeTypes.Created Then 
     _eType = evtType.created 
      notification() 
     End If 
     If e.ChangeType = IO.WatcherChangeTypes.Deleted Then 
     _eType = evtType.deleted 
      notification() 
     End If 
    End Sub 
    Private Sub notification() 
     _mainForm.NotifyIcon1.ShowBalloonTip(500, "Folder Monitor", "A file has been " + [Enum].GetName(GetType(evtType), _eType), ToolTipIcon.Info) 
    End Sub 
End Class 

답변

1

하지만 때 이벤트 : 여기

는 두 번째 클래스의 일부 (전체가 아닌 것)입니다 발생하면 Control.Invoke를 사용하여 UI 스레드에서 코드를 실행할 수 있습니다.이 경우 코드는 도구 설명을 표시하는 함수입니다.

0

감사합니다. frmMain에서 다음을 수행하고 frmMain에서 dispalyToolTip이라는 새 메서드를 호출하는 다른 클래스에서이를 수행하여 알아 냈습니다. frmMain 수에서

는 여기에 내가 무슨 짓을 :

  1. 내가 다른 클래스

    Friend Sub displayTooltip(ByVal tooltipText As String) 
        If Me.InvokeRequired Then 
         Dim delegate1 As New displayTooltipDelegate(AddressOf displayTooltip) 
         Me.Invoke(delegate1, tooltipText) 
        Else 
         NotifyIcon1.ShowBalloonTip(500, "Folder Monitor", tooltipText, ToolTipIcon.Info) 
        End If 
    End Sub 
    
에서 전화를하고 대리인

Private Delegate Sub displayTooltipDelegate(ByVal tooltipText As String) 
  • 추가 된 새로운 방법을 추가

  • 관련 문제