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

博客内容描述了一个关于线程编程的问题,作者在使用BackgroundWorker线程时遇到了 Ole Automation 调用失败的错误,提示需要将线程设置为 STA 模式。在尝试了在 Main 函数添加 STAThreadAttribute 标记后,问题依然存在。作者寻求解决方案。
摘要由CSDN通过智能技术生成

public partial class LiemaiMan : Form

{

BackgroundWorker m_Worker;// 放在后台执行

// 用一个标记来看是否请求停止执行

bool m_NeedRun = false;

public LiemaiMan()

{

InitializeComponent();

m_Worker = new BackgroundWorker();

m_Worker.DoWork += new DoWorkEventHandler(m_Worker_DoWork);

}

private void m_Worker_DoWork(object sender, EventArgs e)

{

while (m_NeedRun)

for (int i = 1; i <= 12; i++)

{

Bgop.KeyPress(hwnd, 8);

}

//备份

System.Threading.Thread.Sleep(2000);

Clipboard.SetText(this.dataGridView1.Rows[x].Cells[0].Value.ToString());

//装弹

Bgop.PostMessage(hwnd, 770);

//恢复备份d

SendKeys.SendWait(“{TAB}”);

System.Type oType = System.Type.GetTypeFromProgID(“WScript.Shell”);

object o = System.Activator.CreateInstance(oType);

oType.InvokeMember(“SendKeys”, System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { this.dataGridView1.Rows[x].Cells[1].Value.ToString() });

oType.InvokeMember(“SendKeys”, System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { “{ENTER}” });

}

private void button21_Click(object sender, EventArgs e)

{

m_NeedRun = true;

m_Worker.RunWorkerAsync();

}

private void button20_Click(object sender, EventArgs e)

{

m_NeedRun = false;

}

线程执行到 Clipboard.SetText(this.dataGridView1.Rows[x].Cells[0].Value.ToString());这句就提示在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main函数带有STAThreadAttribute标记。

见检查已经有[STAThread]

static void Main()

这该怎么解决啊?各位大侠帮忙看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值