Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > потоки, создание компонентов


Автор: Kirill89 4.1.2010, 17:29
Код

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public bool test()
        {
            try
            {
                WebBrowser a = new WebBrowser();
                a.Navigate("http://test.ru");
            }catch
            {
                ...
            }
        }
...
Thread t = new Thread(delegate() {
test();
});
t.Start();
...

выдаёт ошибку
Код

Message    "Создание экземпляра элемента управления ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' невозможно: текущий поток не находится в однопоточном контейнере."

почему? что делать?

Автор: tol05 4.1.2010, 18:17
примерно так
Код

public bool test()
        {
            try
            {
                Invoke(new MethodInvoker(() =>
                                          {
                                              WebBrowser a = new WebBrowser();
                                              a.Navigate("http://test.ru");
                                          }));
                
            }
            catch(Exception ex)
            {
                ....
            }

            ....
        }

Автор: ivashkanet 6.1.2010, 11:03
tol05, прокатит, но а толку то? На время заргузки страницы UI будет недоступен. Вся фишка потока будет потеряна. (не в курсе, останавливает ли Navigate работу своего потока или нет, но раз захотелось проделывать это в отдельном потоке, то неспроста smile )

Предлагаю сначала создать WebBrowser, а в потоке вызвать только Navigate (надеюсь ему UI поток не нужен)

P.S. Для получения многопоточности в формах лучше использовать BackgroundWorker:
http://www.rsdn.ru/article/dotnet/CSThreading2.xml#EEE
http://www.rsdn.ru/article/dotnet/WinForms20.xml#E3ZAG

По первой ссылке так же можно почитать зачем некоторые операции в WinForms обязательно должны выполняться в основном потоке.

Автор: tol05 6.1.2010, 11:39
Цитата(ivashkanet @  6.1.2010,  10:03 Найти цитируемый пост)
tol05, прокатит, но а толку то? 


ivashkanet, я просто считаю что это был псевдо-код )
поэтому и предложил решение... абстрактное


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)