call was rejected by callee我在调用word对象来写文档的时候报的错,弄不明白为什么,代码是这样object BookMarkName = bookname;
object what = Word.WdGoToItem.wdGoToBook;
object missing = Type.Missing; w.Selection.GoTo(ref what, ref missing, ref missing, ref BookMarkName);
for( int i = 0;i < list.Count ; i ++ )
{
w.Selection.TypeText("(" + i.ToString() + ") " + list[i]);
w.Selection.TypeParagraph();
}
System.Threading.Thread.Sleep( 500 );w是doc的ActiveWindow成员。bookname是标签名,list是一个StringCollection对象,我用来保存需要写入的数据的。
问题来了,以上的代码,我写成一个函数,TypeText。然后我多次调用这个函数TypeText的时候就会报这个错,找了很多地方,有的地方说是异步导致的,奇怪,我这个地方没有使用异步,难道w.Selection.TypeText是异步的?或者w.Selection.TypeParagraph是异步的?
搞不明白了。有时候抱这个错误,有时候又不报这个错误,有没有人帮下我???

解决方案 »

  1.   

    事实上,VSTO就是一个使用COM操作的多线程程序。
    出现这种情况可能是其中的某个COM对象被回收了,也可能是某个对象泄露掉了,使用CRW时最好不要w.Selection.XXX,这样很可能导致中间CRW的wrapper对象被提前回收或者无法回收。
      

  2.   

    http://msdn.microsoft.com/en-us/library/ms228772(VS.80).aspx
      

  3.   


    那么请问,我既然最好不好使用selection来进行写操作,那么我要使用Word中什么属性来写text??我的想法是找到 书签,然后再书签位置写下text,并且写完一条text,我就换一行,由于对Word对象的不了解,所以只好开口问了····还有谁有办法吗???最好不是使用\t \n之类的符号,那样太牵强了~~要低的确确的写完一行,然后换行。
      

  4.   


    好文章,绝对的好文章,唉····C#搞久了,居然连MSDN都不知道去看了。。罪过罪过···这个文章的中文地址是
    http://msdn.microsoft.com/zh-cn/library/ms228772(VS.80).aspx只是看了半天,感觉···IOleMessageFilter类的子类的对象,在刚开始的时候被注册,在最后被释放。一点用都没有嘛~~难道这个对象与EnvDTE80.DTE2 对象有某种联系??靠,微软真不老实,关键的东西总是躲躲藏藏,还找都没地方找!!基本上我大概知道我这个问题的原因了···个人感想是 我的程序调用 Word 的时候,Word 的Com 对象中线程出现了问题,靠,既然微软这么强大,为什么不把com写好点,居然让com在线程上出现问题。具体出现的什么问题,大家看看我给的地址就明白了,就不多说了,周5上班给分。大家多多回复啊·····群众的力量是强大滴···人多问题解决起来就快。
      

  5.   


    再次看了自己的帖子有点恋帖··2楼说的不错,原因是你所说,但是问题就在我根本没有安装过VSTO,在项目中只是引用了office的library和一个word的com对象,似乎跟vsto没有挂钩吧,难道vs中自带了vsto??或者说是我只要引用了office的library,VSTO就被自己调用起来了? 我使用的是vs 2003, .net1.1。
      

  6.   

    哈哈,看来你这贴是不准备结了,我在VS2003中操作Excel也出了相同问题:-------------------------------------------------------------------------
    Error: [2009-03-10 03:11:37 mscorlib]:Exception has been thrown by the target of an invocation.Call was rejected by callee.
    -------------------------------------------------------------------------
      

  7.   

    MSDN推荐的解决方法也怪怪的,我们的发布环境是不可能安装 Visual Studio的开发环境的