Waitforexit interrupt my running application in unity

后端 未结 2 624
伪装坚强ぢ
伪装坚强ぢ 2020-12-21 22:11

I\'m trying to run an exe application in unity to perform some function and that exe file will take an input from my microphone when running in unity so i must wait until it

2条回答
  •  生来不讨喜
    2020-12-21 22:54

    You don't have to use WaitForExit since it's blocking the main Thread. There are two workarounds for your issue:

    1.Set EnableRaisingEvents to true. Subscribe to the Exited event and use that to determine when the opened program has closed. Use a boolean flag to determine if it is still opened or not in the Update function.

    bool processing = false;
    
    void Start()
    {
        processing = true;
    
        Process p = new Process(); ;
        p.StartInfo = new System.Diagnostics.ProcessStartInfo("E:\\app\\dist\\app.exe");
        p.StartInfo.WorkingDirectory = @"\Assets\\app\\dist\\app.exe";
        p.StartInfo.CreateNoWindow = true;
        p.EnableRaisingEvents = true;
        p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        p.Exited += new EventHandler(OnProcessExit);
        p.Start();
    }
    
    private void OnProcessExit(object sender, EventArgs e)
    {
        processing = false;
    }
    
    
    void Update()
    {
        if (processing)
        {
            //Still processing. Keep reading....
        }
    }
    

    2.Continue with your WaitForExit but only use that code in a new Thread so that it doesn't block or freeze Unity's main Thread.

    //Create Thread
    Thread thread = new Thread(delegate ()
    {
        //Execute in a new Thread
        Process p = new Process(); ;
        p.StartInfo = new System.Diagnostics.ProcessStartInfo("E:\\app\\dist\\app.exe");
        p.StartInfo.WorkingDirectory = @"\Assets\\app\\dist\\app.exe";
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        p.Start();
        p.WaitForExit();
    
        //....
    });
    //Start the Thread and execute the code inside it
    thread.Start();
    

    Note that you can't use Unity's API from this new Thread. If you want to do so, use UnityThread.executeInUpdate. See this for more information.

提交回复
热议问题