Я - обучающийся на примерах C # -кодер, который не очень продвинут, поэтому эта проблема ставит меня в тупик, независимо от количества информации в Интернете.
По сути, я создаю программу, которая по таймеру периодически опрашивает веб-сайт, чтобы получить некоторую информацию. Во время этого процесса создается элемент управления WebBrowser для перехода к информации (необходимой для аутентификации). Программа запускает эту серию событий при запуске, а затем использует System.Timers.Timer, установленный на каждые 10 минут (меньше, конечно, для отладки), чтобы выполнять ту же серию событий, когда мое событие Timer.Elapsed запускает этот процесс, я получаю а:
ThreadStateException с описанием как Элемент управления ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' не может быть создан, поскольку текущий поток не находится в однопоточной квартире.
Вот уменьшенная версия моей программы.
private void Form1_Load(object sender, EventArgs e)
{
GetDataFromWebBrowser();
Set_Auto_Refresh_Timer();
}
private void Set_Auto_Refresh_Timer()
{
System.Timers.Timer TimerRefresh = new System.Timers.Timer(10000);
TimerRefresh.Elapsed += new System.Timers.ElapsedEventHandler(TimerRefresh_Elapsed);
TimerRefresh.AutoReset = true;
TimerRefresh.Start();
}
private void TimerRefresh_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
GetDataFromWebBrowser();
}
private void GetDataFromWebBrowser()
{
WebBrowser wb = new WebBrowser(); <--This is where the error is thrown.
...get web data...
}
Я думаю, у меня достаточно кода, чтобы нарисовать картину Как вы можете видеть, при создании другого WebBrowser выдает ошибку.
Я действительно в замешательстве, и я только начинаю царапать поверхность по Threading, поэтому, наверное, я и так в замешательстве.
// Решение для меня /
Я закончил тем, что удалил создание WebBrowser из метода, а также сделал его статическим, чтобы просто повторно использовать элемент управления WebBrowser. Я также поменял свой System.Timers.Timer на System.Threading.Timer. Казалось бы, решить проблему.