首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止MS-Word内存错误

如何防止MS-Word内存错误
EN

Stack Overflow用户
提问于 2017-08-31 23:26:57
回答 1查看 82关注 0票数 0

有没有办法释放内存,防止以下代码在MS-Word中崩溃?我收到以下错误消息:

由于内存或磁盘问题,此方法或属性不可用。

代码语言:javascript
复制
Sub vbaTest()
Dim doc As Document
Dim sty As Style
Dim s As Style
Dim readingOrder As WdReadingOrder
Dim i As Integer
    Set doc = ActiveDocument
    Set sty = doc.Styles(wdStyleNormal)
    For i = 0 To 100
        readingOrder = sty.ParagraphFormat.readingOrder
        For Each s In doc.Styles
            s.Font.SizeBi = s.Font.Size + 3
        Next
        Set s = Nothing
    Next
    Set sty = Nothing
End Sub

-或者

代码语言:javascript
复制
public void CsharpRibbon_Click(O.IRibbonControl c)
{
    var doc = app.ActiveDocument;
    var style = doc.Styles[Wd.WdBuiltinStyle.wdStyleNormal];
    for (int i = 0; i < 100; i++)
    {
        var readingOrder = style.ParagraphFormat.ReadingOrder;
        foreach (Wd.Style s in doc.Styles)
            s.Font.SizeBi = s.Font.Size + 3;
    }
}

上面的代码并没有做任何有用的事情。我有一个丝带按钮,我注意到它会导致重复按下按钮的崩溃(在一个单词会话中大约有5到6次)。我去掉了代码,并添加了for循环来模拟按钮的多次按压。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 13:00:03

我不确定这是否是您的错误,因为100次迭代似乎不足以导致内存错误,但是VSTO使用COM对象,必须在使用后释放COM对象。这样做的简单方法是:

代码语言:javascript
复制
Paragraph para = Paragraphs[1];
// etc.
Marshal.ReleaseComObject(yourObject);

还有VSTO接触肋,它使这件事变得更容易了。与其打电话给ReleaseComObject,不如这样做:

代码语言:javascript
复制
using (var doc = Document.WithComCleanup())
using (var paragraphs = doc.Resource.Paragraphs.WithComCleanup())
{
    int count = paragraphs.Resource.Count;
    // etc.
}

或者,对于收藏品:

代码语言:javascript
复制
foreach (Paragraph para in Paragraphs.ComLinq<Paragraph>())
{
    int pageBreakBefore = para.PageBreakBefore;
    // etc.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45991436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档