protected override void DoCreate() { base.DoCreate(); cameraImageDrawer_ = new smartar.CameraImageDrawer(smart_); sensorDevice_ = new smartar.SensorDevice(smart_); screenDevice_ = new smartar.ScreenDevice(smart_); smartar.SensorDeviceInfo sensorInfo = new smartar.SensorDeviceInfo(); sensorDevice_.GetDeviceInfo(sensorInfo); recognizer_.SetSensorDeviceInfo(sensorInfo); CreateParam param; param.smart_ = smart_.self_; param.recognizer_ = recognizer_.self_; param.sensorDevice_ = sensorDevice_.self_; param.screenDevice_ = screenDevice_.self_; param.cameraImageDrawer_ = cameraImageDrawer_.self_; self_ = sarSmartar_SarSmartARController_sarDoCreate(ref param, numWorkerThreads_ > 0); if (self_ != IntPtr.Zero) { // Start worker threads if (numWorkerThreads_ > 0) { workerThreads_ = new Thread[numWorkerThreads_]; for (int i = 0; i < numWorkerThreads_; ++i) { Thread thread = new Thread(() => { sarSmartar_SarSmartARController_sarRunWorkerThread(self_); }); thread.Start(); workerThreads_[i] = thread; } } else { workerThreads_ = null; } started_ = true; } }
protected override void DoDestroy() { // Finish worker threads if (numWorkerThreads_ > 0) { if (self_ != IntPtr.Zero) { sarSmartar_SarSmartARController_sarFinishWorkerThread(self_); } for (int i = 0; i < numWorkerThreads_; ++i) { workerThreads_[i].Join(); } } if (self_ != IntPtr.Zero) { sarSmartar_SarSmartARController_sarDoDestroy(self_); self_ = IntPtr.Zero; } if (screenDevice_ != null) { screenDevice_.Dispose(); screenDevice_ = null; } if (sensorDevice_ != null) { sensorDevice_.Dispose(); sensorDevice_ = null; } if (cameraImageDrawer_ != null) { cameraImageDrawer_.Dispose(); cameraImageDrawer_ = null; } base.DoDestroy(); }