public void ThreadProc()
        {
            OperationTaskModel operationTask = new OperationTaskModel();

            try
            {
                AzureSQLHelper.IoTHubModel iotHubModel = new AzureSQLHelper.IoTHubModel();
                IoTHub iotHub = iotHubModel.GetById(_IoTHubReceiverMsg.content.iotHubId);
                string iotHubConnectionString = iotHub.IoTHubConnectionString;

                //IoTHub iotHub = new IoTHub();
                //iotHub.Id = 1001;
                //iotHub.IoTHubName = "OPC UA Default";
                //string iotHubConnectionString = "HostName=opcuademobox.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=2eHR7uKDmrajO6201NBfUlzGGLrIDi55A2URg0EZuCo=";

                IoTHubHelper iotHubHelper = new IoTHubHelper(iotHubConnectionString);
                string[]     partitions   = iotHubHelper.GetPartitions();

                _Version = _IoTHubReceiverMsg.content.version;
                if (string.IsNullOrEmpty(_Version))
                {
                    _Version = _SrvFabricIoTHubReceiverTypeVersion;
                }

                _CompanyId = _IoTHubReceiverMsg.content.companyId.ToString();
                if (_CompanyId == "0")
                {
                    _CompanyId = iotHub.CompanyID.ToString();
                }

                ProvisionApp._appLogger.Info(string.Format("Company ID: {0}, IoTHub ID: {1}, Version: {2}", _CompanyId, _IoTHubReceiverMsg.content.iotHubId, _Version));

                switch (_IoTHubReceiverMsg.task)
                {
                case TaskName.IoTHubReceiver_Launch:
                    if (iotHub.EnableMultipleReceiver)
                    {
                        for (int i = 0; i < partitions.Length; i++)
                        {
                            string label = i + "-" + partitions.Length;
                            lanuchIoTHubReceiver(iotHub.CompanyID.ToString(), iotHub, partitions[i], label);
                            ProvisionApp._appLogger.Info("[IoTHubReceiver] " + _IoTHubReceiverMsg.task + " success: CompanyId-" + _CompanyId + ", IoTHubReceiverName-" + iotHub.IoTHubName + ", Label-" + label);
                        }
                    }
                    else
                    {
                        lanuchIoTHubReceiver(_CompanyId, iotHub, "ALL", "ALL");
                        ProvisionApp._appLogger.Info("[IoTHubReceiver] " + _IoTHubReceiverMsg.task + " success: CompanyId-" + _CompanyId + ", IoTHubReceiverName-" + iotHub.IoTHubName + ", Label-" + "ALL");
                    }
                    break;

                case TaskName.IoTHubReceiver_Shutdown:
                    // Shutdown All Partitions Processes (it maybe not running)
                    for (int i = 0; i < partitions.Length; i++)
                    {
                        string label = i + "-" + partitions.Length;
                        shutdownIoTHubReceiver(_CompanyId, iotHub, partitions[i], label);
                        ProvisionApp._appLogger.Info("[IoTHubReceiver] " + _IoTHubReceiverMsg.task + " success: CompanyId-" + _CompanyId + ", IoTHubReceiverName-" + iotHub.IoTHubName + ", Label-" + label);
                    }
                    // Shutdown Non-Partition Process (it maybe not running)
                    shutdownIoTHubReceiver(_CompanyId, iotHub, "ALL", "ALL");
                    ProvisionApp._appLogger.Info("[IoTHubReceiver] " + _IoTHubReceiverMsg.task + " success: CompanyId-" + _CompanyId + ", IoTHubReceiverName-" + iotHub.IoTHubName + ", Label-" + "ALL");
                    break;
                }
                operationTask.UpdateTaskBySuccess(_IoTHubReceiverMsg.taskId);
            }
            catch (Exception ex)
            {
                StringBuilder logMessage = new StringBuilder();
                logMessage.AppendLine("[IoTHubReceiver] " + _IoTHubReceiverMsg.task + " Failed: CompanyId-" + _CompanyId + ", IoTHubId-" + _IoTHubReceiverMsg.content.iotHubId);
                logMessage.AppendLine("\tMessage:" + JsonConvert.SerializeObject(this));
                logMessage.AppendLine("\tException:" + ex.Message);
                ProvisionApp._appLogger.Error(logMessage);
                operationTask.UpdateTaskByFail(_IoTHubReceiverMsg.taskId, ex.Message);
            }
        }