System.Runtime.InteropServices.COMException:“由于应用程序正在调度输入同步调用,因此无法进行传出调用。(来自 HRESULT 的异常:0x8001010D

Jiale Xue - MSFT 46,296 信誉分 Microsoft 供应商
2024-04-17T07:53:31.9933333+00:00

在网络连接或断开连接后更改 wbbrowser 宽度会引发错误“System.Runtime.InteropServices.COMException: '无法进行传出调用,因为应用程序正在调度输入同步调用。(HRESULT 的异常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))'”

63151-image.png

附上源代码。请做需要的。

using iTuner;  
using System;  
using System.Windows.Forms;  
  
namespace NetworkConnectError  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
  
            DisposeBrowser();  
            WindowState = FormWindowState.Minimized;  
            this.Visible = false;  
  
        }  
  
        private void DisposeBrowser()  
        {  
            try  
            {  
                if (webBrowser1 == null || webBrowser1.IsDisposed) return;  
  
                webBrowser1.Navigate(new Uri("about:blank"));//TRK - 107  
                webBrowser1.Stop();  
  
            }  
            catch (Exception ex)  
            {  
                MessageBox.Show(ex.Message);  
            }  
        }  
  
        private void NetworkAvailabilityChanged(object sender, NetworkStatusChangedArgs e)  
        {  
            try  
            {  
                if (e.IsAvailable)  
                {  
  
                    System.Threading.Thread myThread = new System.Threading.Thread(new System.Threading.ThreadStart(Client));  
                    myThread.Start();  
                }  
            }  
            catch (Exception ex)  
            {  
                MessageBox.Show(ex.Message);  
            }  
        }  
  
  
        private void Client()  
        {  
            //WindowState = FormWindowState.Maximized;  
            webBrowser1.Left = 0;  
            webBrowser1.Top = 0;  
  
            Screen scr = Screen.PrimaryScreen;  
            webBrowser1.Width = scr.Bounds.Width;  
            int iHeight = scr.Bounds.Height;  
            iHeight = iHeight + 50;  
            webBrowser1.Height = iHeight;  
        }  
  
        private void Form1_Load(object sender, EventArgs e)  
        {  
            NetworkStatus.AvailabilityChanged += new NetworkStatusChangedHandler(NetworkAvailabilityChanged);  
        }  
    }  
}  


Note:此问题总结整理于: System.Runtime.InteropServices.COMException: 'An outgoing call cannot be made since the application is dispatching an input-synchronous call. (Exception from HRESULT: 0x8001010D

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
113 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
    2024-04-17T08:37:06.98+00:00

    根据您的代码,这可能是线程问题。 我建议你使用一个 BackgroundWorker,它对 Windows 窗体控件进行线程安全调用。 下面是一个可以参考的代码示例。

    private void Form1_Load(object sender, EventArgs e)  
    {  
    backgroundWorker1.RunWorkerAsync();  
    }  
      
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)  
    {  
        webBrowser1.Left = 0;  
        webBrowser1.Top = 0;  
        Screen scr = Screen.PrimaryScreen;  
        webBrowser1.Width = scr.Bounds.Width;  
        int iHeight = scr.Bounds.Height;  
        iHeight = iHeight + 50;  
        webBrowser1.Height = iHeight;  
    }  
    

    这是您可以参考的相关文档


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。