Question

I have WebBrowser control and i am calling a function to get all the control ID from a thread. the functions works when i called it from the UI thread but does not get any control if called from a separate thread.

I am lost please help

calling:

List<WebOparator.WebOparator.WebControls> wcList = oparator.GetAllControlName();
int tryCount = 0;
do
{

if (wcList.Count == 0)
{
    tryCount++;
    Thread.Sleep(2000);
    wcList = oparator.GetAllControlName();
 }
 if (tryCount >= 5) break;
 } while (wcList.Count == 0);

Method:

    public List<WebControls> GetAllControlName()
    {

            List<WebControls> names = new List<WebControls>();
            if (this.InvokeRequired)
            {

                this.BeginInvoke((MethodInvoker)delegate
                {
                    int i = 0;
                    foreach (HtmlElement element in myBrowser1.Document.All)
                    {
                        if (element.Id != null)
                        {
                            i++;
                            names.Add(new WebControls() { sl = i, ID = element.Id, TagName = element.TagName });
                        }
                    }
                });
            }
            else
            {
                int i = 0;
                foreach (HtmlElement element in myBrowser1.Document.All)
                {
                    if (element.Id != null)
                    {
                        i++;
                        names.Add(new WebControls() { sl = i, ID = element.Id, TagName = element.TagName });
                    }
                }
            }
            return names;


    }

Edit:

I found that the function goes in loops through all the control and add them to the list but returns an empty list....

Was it helpful?

Solution

BeginInvoke() is asynchronous.
That delegate yuns on the UI thread after the rest of your code finishes.

You want Invoke(), which will synchronously wait for the delegate to finish running.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top