C# MonoTouch ZXING摄像头赢得';t打开

C# MonoTouch ZXING摄像头赢得';t打开,c#,xamarin.ios,zxing,C#,Xamarin.ios,Zxing,我正在使用此应用程序扫描ZXING条形码: 如果我进入应用程序,扫描条形码,按home(主页)按钮,重新进入应用程序,然后单击scan(扫描),我会看到一个看起来像相机快门永远不会打开的黑屏。我在这张票上贴了一张照片 如果我按取消,然后返回扫描,我会看到相机再次打开 为什么相机在某些情况下从不打开 我必须将此代码添加到Info.plist: UIApplicationExitsOnSuspend是 对于App Delegate,我必须添加以下代码: public override vo

我正在使用此应用程序扫描ZXING条形码:

如果我进入应用程序,扫描条形码,按home(主页)按钮,重新进入应用程序,然后单击scan(扫描),我会看到一个看起来像相机快门永远不会打开的黑屏。我在这张票上贴了一张照片

如果我按取消,然后返回扫描,我会看到相机再次打开

为什么相机在某些情况下从不打开


我必须将此代码添加到Info.plist:

UIApplicationExitsOnSuspend是

对于App Delegate,我必须添加以下代码:

    public override void OnResignActivation (UIApplication application)
    {
        UIApplication.SharedApplication.PerformSelector(new Selector("terminateWithSuccess"), null, 0f);
    }
    public override void OnResignActivation (UIApplication application)
    {
        cvc.PerformSelector(new Selector("terminateWithSuccess"), null, 0f);
    }

此软件中使用的录像机无法在后台线程上运行。

您不必极端地将应用程序更改为不在后台运行

我通过在AppDelegate上创建viewcontroller属性修复了此问题,每次启动cameraviewcontroller打开相机时,我都会指向此属性。我叫它cvc

我通过以下方式访问该物业:

AppDelegate ad=(AppDelegate)UIApplication.SharedApplication.Delegate

然后在AppDelegate中,我有以下代码:

    public override void OnResignActivation (UIApplication application)
    {
        UIApplication.SharedApplication.PerformSelector(new Selector("terminateWithSuccess"), null, 0f);
    }
    public override void OnResignActivation (UIApplication application)
    {
        cvc.PerformSelector(new Selector("terminateWithSuccess"), null, 0f);
    }

感谢kickstart,我通过创建自己的扫描方法解决了这个问题,该方法保留了对以前显示的
ViewController的引用,并在显示新的
之前对其进行处理

public static class BarcodeScanner
{
    private static ZxingCameraViewController currentBarcodeScanner;

    public static Task<Result> Scan(UIViewController hostController, MobileBarcodeScanner scanner, MobileBarcodeScanningOptions options)
    {
        return Task.Factory.StartNew(delegate
        {
            Result result = null;

            var scanResultResetEvent = new ManualResetEvent(false);

            hostController.InvokeOnMainThread(delegate
            {
                // Release previously displayed barcode scanner
                if (currentBarcodeScanner != null)
                {
                    currentBarcodeScanner.Dispose();
                    currentBarcodeScanner = null;
                }

                currentBarcodeScanner = new ZxingCameraViewController(options, scanner);

                // Handle barcode scan event
                currentBarcodeScanner.BarCodeEvent += delegate(BarCodeEventArgs e)
                {
                    currentBarcodeScanner.DismissViewController();
                    result = e.BarcodeResult;
                    scanResultResetEvent.Set();
                };

                // Handle barcode scan cancel event
                currentBarcodeScanner.Canceled += delegate
                {
                    currentBarcodeScanner.DismissViewController();
                    scanResultResetEvent.Set();
                };

                // Display the camera view controller
                hostController.PresentViewController(currentBarcodeScanner, true, delegate{});
            });

            // Wait for scan to complete
            scanResultResetEvent.WaitOne();

            return result;
        });
    }
}

你能再详细说明一下你到底做了什么吗?谢谢。您可以修复此问题,而不会导致您的应用程序在发送到后台时终止。请看我的答案