我的项目需要分析网页内容,采用webbrowser控件来模拟一些网页操作的动作(填,提交表单等)。1,所有的分析,都必须在webbrowser加载完毕后才能进行操作。
2,webbrowser是放在主线程里的。
3,任务很多的时候,比如我有10个网址需要处理,就必须依次处理这10个任务,很慢。假想:
1,在主线程多放几个webbrowser控件,来执行多个任务,但其实还是在主线程里同步实行的,所以效率也提高不了多少。
   而且,流程控制起来很混乱(我用定时器来实现的)。
2,用POST的方法,但目前找不到提交参数的,暂时不考虑
3,是用多线程来实现,比如我在另外一个线程里创建一个对话框,这个对话框又包括一个webbrowser控件,如果能实际运行,那么每个单独线程都可以独立解决任务了。可是在另外线程的对话框,无法运行,会产生错误,是因为webbrowser控件的缘故。问题就在这里,是不是webbrowser控件是无法在主线程之外的线程创建的?(或者说是运行)有什么解决的办法?
4,如果采用多进程可以吗?

解决方案 »

  1.   

    初始化是不是像这样?
    CoInitialize(NULL);CoUninitialize();
      

  2.   

    部分代码:unsigned int __stdcall mythread(LPVOID param)
    {
         CoInitialize(NULL);
         CWebDlg  dlg;//这是一个对话框,对话框里包含一个webbrowser控件
         dlg.DoModal();
         CoUninitialize();     return 0;
    }void OnButton()
    {
      _beginthreadex(0,0,&mythread,this,0,0);
    }
    这样不行
      

  3.   

      提示错误File: f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\oleinit.cpp如果换成
    void OnButton()
    {
      CWebDlg dlg;
    dlg.Domodal();
    }就可以
      

  4.   

    2,用POST的方法,但目前找不到提交参数的,暂时不考虑
    可以用抓包工具看看
      

  5.   

    本帖最后由 oyljerry 于 2010-08-25 14:57:25 编辑