c#继承例子_s.push(line)_dialogresult.ok

电脑杂谈  发布时间:2017-02-13 00:07:32  来源:网络整理

showdialog() 错误的解决

private openfiledialog openfiledialog1;

private dialogresult result;

private void linklabel1_linkclicked(object sender, linklabellinkclickedeventargs e)

{

openfiledialog1 = new openfiledialog();

string patch = application.startuppath + "log";

openfiledialog1.initialdirectory = patch;

openfiledialog1.filter = "xls files (*.xls)|*.xls";

result = openfiledialog1.showdialog();

if (result == dialogresult.ok)

{

if (openfiledialog1.filename != "")

{

process.start(openfiledialog1.filename);

}

}

}

就会报

在可以调用 ole 之前,必须将当前线程设置为单线程单元(sta)模式。请确保您的 main 函数带有 stathreadattribute 标记。dialogresult.ok 只有将调试器附加到该进程才会引发此异常。

在测试小程序里没有问题,当移到大程序里就这样的问题了。dialogresult.ok可能是线程多的原因。解决办法就是添加线程,代码如下

private thread invokethread;

private void linklabel1_linkclicked(object sender, linklabellinkclickedeventargs e)

{

openfiledialog1 = new openfiledialog();

openfiledialog1.initialdirectory = patch;

openfiledialog1.filter = "xls files (*.xls)|*.xls";

invokethread = new thread(new threadstart(invokemethod));

invokethread.setapartmentstate(apartmentstate.sta);

invokethread.start();

invokethread.join();

if (result == dialogresult.ok)

{

if (openfiledialog1.filename != "")

{

process.start(openfiledialog1.filename);

}

}

}

private void invokemethod()

{

result = openfiledialog1.showdialog();

}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32083-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...