从WPF C#帮助按钮启动的Skype在呼叫终止时挂起桌面计算机

从WPF C#帮助按钮启动的Skype在呼叫终止时挂起桌面计算机,c#,wpf,winforms,desktop-application,skype4com,C#,Wpf,Winforms,Desktop Application,Skype4com,我有一个独立的桌面WPF C#应用程序,带有一个帮助按钮,可以启动Skype电话呼叫我的帮助台。如果服务台终止呼叫,一切正常。但是,如果客户(应用程序用户)终止呼叫,应用程序将挂起。我通过搜索许多web源代码拼凑了以下代码 private void btnSkype_Click(object sender, EventArgs e) { Skype oSkype = new Skype(); if (!oSkype.Client.IsRunning) {

我有一个独立的桌面WPF C#应用程序,带有一个帮助按钮,可以启动Skype电话呼叫我的帮助台。如果服务台终止呼叫,一切正常。但是,如果客户(应用程序用户)终止呼叫,应用程序将挂起。我通过搜索许多web源代码拼凑了以下代码

private void btnSkype_Click(object sender, EventArgs e)
    {
        Skype oSkype = new Skype();
        if (!oSkype.Client.IsRunning) {
            oSkype.Client.Start(false, false); //minimized, no splash      
        }
        try {
            oSkype.Attach(5, true); //wait for client to be connected and ready
        }
        catch (Exception ex) {
            MessageBox.Show("Exception: " + ex.Message);
        }
        Call oCall = oSkype.PlaceCall("SRGWJG");
        do
        {
            System.Threading.Thread.Sleep(1);
        } while (oCall.Status != TCallStatus.clsInProgress);
        oSkype.Client.Focus();
        oCall.StartVideoSend();
        do
        {
          System.Threading.Thread.Sleep(1);
        } while (oCall.Status == TCallStatus.clsInProgress);
        oSkype.Client.Minimize();                     
    }

对不起,我不知道如何格式化代码。我会再试一次。你不应该只是复制粘贴代码,你应该了解它的作用。在循环中调用
Thread.Sleep
将冻结应用程序,可能会阻止它更新
oCall
状态。您应该听
oCall
对象的事件。