using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
    public partial class Form2 : Form
    {
        System.Timers.Timer timer;
        public Form2()
        {
            InitializeComponent();
            timer = new System.Timers.Timer();
            object obj=  timer.InitializeLifetimeService();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.Interval = 5000;
            timer.Enabled = true;
        }      public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            WebBrowser web = new WebBrowser();
        }
    }
}
  WebBrowser web = new WebBrowser();
报错
错误:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。请大家不要改掉 WebBrowser  以及Timer (因为一个项目框架中用的Timer,我写的程序中用的WebBrowser)
http://topic.csdn.net/u/20100510/19/7f68e347-c047-44a3-96e9-5bcfdd64afff.html
这两个问题差不多,都一百分

解决方案 »

  1.   

    1、不要用System.Timers.Timer 用Timer控件
    2、委托
    3、参考:http://topic.csdn.net/u/20100510/12/2fc74a41-6c2b-4a9a-bf23-41ca47ae77c1.html
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsApplication1
    {
        public partial class Form2 : Form
        {
            WebBrowser web ;
            System.Timers.Timer timer;
            public Form2()
            {
                InitializeComponent();
                timer = new System.Timers.Timer();
                object obj=  timer.InitializeLifetimeService();
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                timer.Interval = 5000;
                timer.Enabled = true;
            }      public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
               web = new WebBrowser();
            }
        }
    }
    虽然给你改了,但是不建议这样写。尤其避免使用timer控件。
      

  3.   

    主线程中写一个delegate
    [PermissionSet(SecurityAction.Demand,   Name   =   "FullTrust")]   
    [System.Runtime.InteropServices.ComVisible(true)]
    [STAThread]
      

  4.   

    要用委托delegate
      

  5.   

    timer 会起多个线程的
    所以才会报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
      

  6.   

    http://topic.csdn.net/u/20100505/09/36e0d582-d05a-49bb-8142-74931a53696b.html线程需要为STAThread另一种方法
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            System.Timers.Timer timer;
            public Form1()
            {
                InitializeComponent();
                timer = new System.Timers.Timer();
                object obj = timer.InitializeLifetimeService();
                timer.SynchronizingObject = this;
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                timer.Interval = 1000;
                timer.Enabled = true;
            }        public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                System.Timers.Timer tm = (System.Timers.Timer)sender;
                ISynchronizeInvoke isi = tm.SynchronizingObject;
                isi.Invoke(new MethodInvoker(work), null);
            }        void work()
            {
                WebBrowser web = new WebBrowser();
            }
        }
    }