C# 以编程方式创建和使用WebBrowser C时出现的问题#

C# 以编程方式创建和使用WebBrowser C时出现的问题#,c#,C#,现在我正在尝试使用WebBrowser来单击元素。使用下面的代码,我启动了一个线程 Thread thread = new Thread(Setting3); thread.SetApartmentState(ApartmentState.STA); thread.Start(); 在该线程中,我运行以下代码来创建和使用webBrowser WebBrowser b = new WebBrowser(); b.Navigate("https://example.com/find?id=" +

现在我正在尝试使用
WebBrowser
来单击元素。使用下面的代码,我启动了一个线程

Thread thread = new Thread(Setting3);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
在该线程中,我运行以下代码来创建和使用webBrowser

WebBrowser b = new WebBrowser();
b.Navigate("https://example.com/find?id=" + id);
await WaitForPage(10, b); // waits for page to be loaded
b.Document.GetElementById("MyElement").InvokeMember("Click");                    
b.Dispose();
WaitForPage()

专用异步任务WaitForPage(int超时,WebBrowser浏览器)
{
TaskCompletionSource PageLoaded=null;
PageLoaded=新任务完成源();
int timeappeased=0;
Browser.DocumentCompleted+=(s,e)=>
{
如果(Browser.ReadyState!=WebBrowserReadyState.Complete)返回;
if(PageLoaded.Task.IsCompleted)返回;PageLoaded.SetResult(true);
};
while(PageLoaded.Task.Status!=TaskStatus.RanToCompletion)
{
等待任务。延迟(10);
时间流逝++;
如果(timeappeased>=TimeOut*100)PageLoaded.TrySetResult(true);
}
}

我遇到的问题是,该元素没有被单击,如果它在主线程上,它就会被单击。如果我使用非编程创建的
webBrowser
控件执行该操作,那么它就会正常工作。我还试图在单击元素时使用尽可能少的内存。我不知道为什么,没有吐出任何错误,只是线程退出。

你也可以发布WaitForPage函数吗?@JordyvanEijk补充说,也可以发送请求中提交的HTML?我想你没有打电话给example.com:)可能你的Id搞错了,你有什么优秀的吗?@JordyvanEijk没有例外,我也有一个刚刚设置好的Id。创建后,线程退出。Bumping--不知道这是否有效或违反规则。
        private async Task WaitForPage(int TimeOut, WebBrowser Browser)
    {
        TaskCompletionSource<bool> PageLoaded = null;
        PageLoaded = new TaskCompletionSource<bool>();
        int TimeElapsed = 0;
        Browser.DocumentCompleted += (s, e) =>
        {
            if (Browser.ReadyState != WebBrowserReadyState.Complete) return;
            if (PageLoaded.Task.IsCompleted) return; PageLoaded.SetResult(true);
        };
        while (PageLoaded.Task.Status != TaskStatus.RanToCompletion)
        {
            await Task.Delay(10);
            TimeElapsed++;
            if (TimeElapsed >= TimeOut * 100) PageLoaded.TrySetResult(true);
        }
    }