Inheritance: UIViewController, IScannerViewController
		public override Task<Result> Scan (MobileBarcodeScanningOptions options)
		{
			return Task.Factory.StartNew(() => {

				try
				{
					scanResultResetEvent.Reset();

					Result result = null;

					this.appController.InvokeOnMainThread(() => {

						//viewController = new ZxingCameraViewController(options, this);
						viewController = new ZXing.Mobile.ZXingScannerViewController(options, this);

						viewController.OnScannedResult += barcodeResult => {

							viewController.InvokeOnMainThread(() => {
								viewController.Cancel();
								viewController.DismissViewController(true, () => {

									result = barcodeResult;
									scanResultResetEvent.Set();

								});
							});
						};

						appController.PresentViewController(viewController, true, null);
					});

					scanResultResetEvent.WaitOne();
					viewController.Dispose();

					return result;
				}
				catch (Exception ex)
				{
					Console.WriteLine(ex);
					return null;
				}
			});

		}
        public override Task <Result> Scan(MobileBarcodeScanningOptions options)
        {
            return(Task.Factory.StartNew(() => {
                try
                {
                    scanResultResetEvent.Reset();

                    Result result = null;

                    this.appController.InvokeOnMainThread(() => {
                        //viewController = new ZxingCameraViewController(options, this);
                        viewController = new ZXing.Mobile.ZXingScannerViewController(options, this);

                        viewController.OnScannedResult += barcodeResult => {
                            viewController.InvokeOnMainThread(() => {
                                viewController.Cancel();
                                viewController.DismissViewController(true, null);
                            });

                            result = barcodeResult;
                            scanResultResetEvent.Set();
                        };

                        appController.PresentViewController(viewController, true, null);
                    });

                    scanResultResetEvent.WaitOne();
                    viewController.Dispose();

                    return result;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    return null;
                }
            }));
        }