Imports System.Windows.Threading Imports System.Collections.ObjectModel Public Class ProcessManagerVM Inherits VMBase Private m_nTaskQuantity As Integer = 3 Private m_UpdateDataTimer As New DispatcherTimer Private m_ExecProcessManager As ExecProcessManager Public ReadOnly Property ExecProcessManager As ExecProcessManager Get Return m_ExecProcessManager End Get End Property Public ReadOnly Property ArgumentsQueue As String Get Return m_ExecProcessManager.ArgumentsQueueCount.ToString() End Get End Property Public ReadOnly Property ResultQueue As String Get Return m_ExecProcessManager.ArgumentsResultQueueCount.ToString() End Get End Property Public ReadOnly Property ThreadList As ObservableCollection(Of ThreadData) Get If Not IsNothing(m_ExecProcessManager.ThreadDataList) Then Return New ObservableCollection(Of ThreadData)(m_ExecProcessManager.ThreadDataList.ToList()) Else Return New ObservableCollection(Of ThreadData) End If End Get End Property Private m_dProgress_Value As Double Public ReadOnly Property dProgress_Value As Double Get Return (m_dProgress_Maximum - m_nTaskQuantity - m_ExecProcessManager.ArgumentsQueueCount) '/ m_dProgress_Maximum * 100 End Get End Property Private m_dProgress_Maximum As Double Public ReadOnly Property dProgress_Maximum As Double Get Return m_dProgress_Maximum End Get End Property Sub New(ExecProcessManager As ExecProcessManager) m_ExecProcessManager = ExecProcessManager m_dProgress_Maximum = m_ExecProcessManager.ArgumentsQueueCount + m_nTaskQuantity m_UpdateDataTimer.Interval = New TimeSpan(0, 0, 1) AddHandler m_UpdateDataTimer.Tick, AddressOf UpdateDataTimer_Tick m_UpdateDataTimer.Start() End Sub Private Sub UpdateDataTimer_Tick(sender As Object, e As EventArgs) NotifyPropertyChanged(NameOf(ArgumentsQueue)) NotifyPropertyChanged(NameOf(ResultQueue)) NotifyPropertyChanged(NameOf(ThreadList)) NotifyPropertyChanged(NameOf(dProgress_Value)) End Sub End Class