Hello everyone.

The Mixed Reality Forums here are no longer being used or maintained.

There are a few other places we would like to direct you to for support, both from Microsoft and from the community.

The first way we want to connect with you is our mixed reality developer program, which you can sign up for at https://aka.ms/IWantMR.

For technical questions, please use Stack Overflow, and tag your questions using either hololens or windows-mixed-reality.

If you want to join in discussions, please do so in the HoloDevelopers Slack, which you can join by going to https://aka.ms/holodevelopers, or in our Microsoft Tech Communities forums at https://techcommunity.microsoft.com/t5/mixed-reality/ct-p/MicrosoftMixedReality.

And always feel free to hit us up on Twitter @MxdRealityDev.

The IEnumerator sub-function function does return to the main function in the IEnumerator.

edited June 2020 in Questions And Answers

Hi All
I have a project where I use only voice command to perform some different function and one of them is to take a photo using Hololens .So I use the StartCoroutine(photoshoot()); function to call the IEnumerator photoshoot(). The IEnumerator photoshoot() call the TakePhotosnap();.
It takes the photo perfectly but I have issue after taking the photo it does not go back to IEnumerator.

It stops the code and can not perform any other function.

As you can see in my code ( I put some numbers to help me explain the function )
I call StartCoroutine(photoshoot()); line 11 and in IEnumerator photoshoot() called the TakePhotosnap(); line 12 and it performs taking photo till line 13 Debug.Log("we finish taking photo successfully "); and then stop. It should go to line 14 in IEnumerator photoshoot().
Please what is wrong with my code. and is there any other way to solve it please .
Please help me.My deadline is very soon.

Here is some of my code

private void Takephoto()
// this function is to call to take a photo and save it in a special folder

    Debug.Log("Take Photo function call is started");
   StartCoroutine(photoshoot());   11
    Debug.Log("Take Photo for Hololens");

IEnumerator photoshoot()

    Debug.Log(" The taking photo coroutine is started ");
    yield return new WaitForEndOfFrame();
    Debug.Log("Take Photo");      
   TakePhotosnap();       12  
   Debug.Log("Finish taking photo");       14
    yield return new WaitForEndOfFrame();
    GameObject.Find("Cube").transform.localPosition = new Vector3(Random.Range(-1, 1), 0, Random.Range(1, 3));


private void TakePhotosnap()
    Debug.Log("TakePhoto Call StartPhotoModeAsync () method to start the photo mode");
    Debug.Log("snap pic taken");

    PhotoCapture.CreateAsync(false, OnPhotoCaptureCreated);
void OnPhotoCaptureCreated(PhotoCapture captureObject)
    //Store objects, configure shooting parameters and start shooting mode.
    Debug.Log("Start taking photo calling function");

    photoCaptureObject = captureObject;
    Debug.Log("set camera parameters");

    Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();

    CameraParameters c = new CameraParameters();
    ///  c= CameraParameters
    c.hologramOpacity = 1.0f;
    c.cameraResolutionWidth = cameraResolution.width;
    c.cameraResolutionHeight = cameraResolution.height;
    c.pixelFormat = CapturePixelFormat.BGRA32;
    Debug.Log("camera parameters  finish");

    captureObject.StartPhotoModeAsync(c, OnPhotoModeStarted);

private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result)
    if (result.success)
        //string filename = string.Format(@"CapturedImage{0}_n.jpg", Time.time);
        string filename = string.Format(@"alc.jpg", Time.time);
        Debug.Log("FileName: =" + filename);
        string filePath = System.IO.Path.Combine(Application.persistentDataPath, filename);
        Debug.Log("filePath: =" + filePath);

        string targetPath = @"C: \Users\ABC\Pictures\Camera Roll";
        string destFile = System.IO.Path.Combine(targetPath, filename);

        Debug.Log("destFile: =" + destFile);
        if (!System.IO.File.Exists(filePath))
        // https://blog.csdn.net/Lee_gc/java/article/details/79919042
        Debug.Log("filePath filePath: =" + filePath);

        string filePath2 = System.IO.Path.Combine(Application.dataPath, filename);
        Debug.Log("filePath2: =" + filePath2);

        Debug.Log("finish to set photo file path and name");

        //photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);          
        Debug.LogError("Saved That Image Somewhere" + "FileName: =" + filename + " FilePath: = " + filePath + " FilePath2: = " + filePath2);

        Debug.Log("finish to copy photo to new directory");

        Debug.Log("finish photo);
        photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);

        Debug.Log("we finish taking photo successfuly "); 13

        Debug.LogError("Unable to start photo mode!");
// clean up
void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
    Debug.Log("result=" + result);

    photoCaptureObject = null;

void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result)

    if (result.success)
        Debug.Log("Saved Photo to disk!");
        Debug.Log("Failed to save Photo to disk");




Sign In or Register to comment.