在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttr

只需要在某个线程开始之前设置下面的参数即可

eThread.SetApartmentState(System.Threading.ApartmentState.STA);                       //将线程eThread设置为单线程单元(STA)模式

可以调用 OLE 之前,必须将当前线程设置单线程单元(STA)模式。请确保您Main

05-03

public partial class LiemaiMan : Formrn rn BackgroundWorker m_Worker;// 放在后台执行rn // 用一个标记来看是否请求停止执行 rn bool m_NeedRun = false;rn rn public LiemaiMan()rn rn InitializeComponent();rn m_Worker = new BackgroundWorker();rn m_Worker.DoWork += new DoWorkEventHandler(m_Worker_DoWork);rn rnprivate void m_Worker_DoWork(object sender, EventArgs e)rn rn while (m_NeedRun)rn for (int i = 1; i <= 12; i++)rn rn Bgop.KeyPress(hwnd, 8);rn rn //备份rn System.Threading.Thread.Sleep(2000);rn Clipboard.SetText(this.dataGridView1.Rows[x].Cells[0].Value.ToString());rn //装弹rn Bgop.PostMessage(hwnd, 770);rn //恢复备份d rn SendKeys.SendWait("TAB");rn System.Type oType = System.Type.GetTypeFromProgID("WScript.Shell");rn object o = System.Activator.CreateInstance(oType);rn oType.InvokeMember("SendKeys", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] this.dataGridView1.Rows[x].Cells[1].Value.ToString() );rn oType.InvokeMember("SendKeys", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] "ENTER" );rn rn rn private void button21_Click(object sender, EventArgs e)rn rn m_NeedRun = true; rn m_Worker.RunWorkerAsync();rn rn private void button20_Click(object sender, EventArgs e)rn rn m_NeedRun = false;rn rn线程执行到 Clipboard.SetText(this.dataGridView1.Rows[x].Cells[0].Value.ToString());这句就提示在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main函数带有STAThreadAttribute标记。rn见检查已经有[STAThread]rn static void Main()rn这该怎么解决啊?各位大侠帮忙看看

可以调用 OLE 之前,必须将当前线程设置单线程单元(STA)模式。请确保您Main 函数带有 STAThreadAttribute 标记。 只有将调试

07-29

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。rnrn需要说明的是,小弟的程序是ASP.NET Web应用程序,想要在网页中添加一个按钮,在按钮事件中实现对Word模板的输出rnrn网上的解决办法都是:在main()函数前面加上[STAThread] ,可我的这个程序好像没有main()函数,只有button事件,那怎么办呢,在线请教各位大神~~~~~rnrn附上我出问题的代码:rn protected void Button5_Click(object sender, EventArgs e)rn rn rn //来自博客http://blog.csdn.net/fujie724 rn object oMissing = System.Reflection.Missing.Value;rn //创建一个Word应用程序实例 rn Word._Application oWord = new Word.Application();rn //设置为不可见 rn oWord.Visible = false;rn //模板文件地址,这里假设在X盘根目录 rn object oTemplate = "D://我的简历.dot";rn //以模板为基础生成文档 rn Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);rn //声明书签数组 rn object[] oBookMark = new object[5];rn //赋值书签名 rn oBookMark[0] = "beizhu";rn oBookMark[1] = "name";rn oBookMark[2] = "sex";rn oBookMark[3] = "birthday";rn oBookMark[4] = "hometown";rn //赋值任意数据到书签的位置 rn oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板实现Word生成";rn oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "李四";rn oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "女";rn oDoc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = "1987.06.07";rn oDoc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = "贺州";rnrn //弹出保存文件对话框,保存生成的Word rn SaveFileDialog sfd = new SaveFileDialog();rn sfd.Filter = "Word Document(*.doc)|*.doc";rn sfd.DefaultExt = "Word Document(*.doc)|*.doc";rn rn if (sfd.ShowDialog() == DialogResult.OK)///////////////////////////VS2010运行,此处提示上述问题rn rn object filename = sfd.FileName;rnrn oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,rn ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,rn ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,rn ref oMissing, ref oMissing);rn oDoc.Close(ref oMissing, ref oMissing, ref oMissing);rn //关闭word rn oWord.Quit(ref oMissing, ref oMissing, ref oMissing);rn rn rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试