/// <summary>
        /// 通过图像信息执行
        /// </summary>
        /// <param name="imageInfo">相机信息</param>
        /// <param name="outputs">输出结果</param>
        public void ExecuteByImageInfo(ImageInfo imageInfo, out ItemCollection outputs)
        {
            if (VisionOperation == null)
            {
                Exception exception = new NullReferenceException("VisionOperation invalid");
                RunStatus = new RunStatus(0, EResult.Error, exception.Message, exception);

                throw exception;
            }

            try
            {
                //转换成HImage图像
                hImage?.Dispose();
                CreateHImage(imageInfo, out hImage);

                VisionOperation.Execute(hImage, out outputs);
                RunStatus = VisionOperation.RunStatus;
            }
            catch (Exception ex)
            {
                RunStatus = new RunStatus(0, EResult.Error, ex.Message, ex);
                throw;
            }
        }
        private bool disposedValue = false; // 要检测冗余调用

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: 释放托管状态(托管对象)。
                }

                // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
                // TODO: 将大型字段设置为 null。
                VisionOperation?.Dispose();
                VisionOperation = null;

                //Camera = null;

                disposedValue = true;
            }
        }
        /// <summary>
        /// 通过本地图片执行
        /// </summary>
        /// <param name="file">本地图片路径</param>
        /// <param name="outputs">输出参数</param>
        public void ExecuteByFile(string file, out ItemCollection outputs)
        {
            if (VisionOperation == null)
            {
                Exception exception = new NullReferenceException("VisionOperation invalid");
                RunStatus = new RunStatus(0, EResult.Error, exception.Message, exception);

                throw exception;
            }

            try
            {
                hImage?.Dispose();
                HOperatorSet.ReadImage(out hImage, file);
                VisionOperation.Execute(hImage, out outputs);
                RunStatus = VisionOperation.RunStatus;
            }
            catch (Exception ex)
            {
                RunStatus = new RunStatus(0, EResult.Error, ex.Message, ex);
                throw;
            }
        }