Создайте список слов на основе словаря Microsoft Word - перестает работать в какой-то момент - почему? - PullRequest
1 голос
/ 27 октября 2010

Я написал небольшое приложение, которое генерирует слова и затем проверяет их по словарю Microsoft Word 2007.

Это прекрасно работает для меня, когда я проверяю его по английскому словарю с длиной 3 буквы (и, наверное, с большим количеством букв), но по какой-то причине он перестает работать, когда я пытаюсь запустить его по словарю иврита.

Кто-нибудь знает почему? Если да, как я могу решить это? Если есть лучший способ сделать это, я буду рад, если кто-то может указать.

спасибо.

Обновление: когда я сказал, что он останавливается, я имел в виду, что он перестает проверять слова. Я получаю все комбинации слов до конца, но они не проверяются.

MainWindow.xaml

<Window x:Class="AllHebrewWords.CreateDictionary"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="List of words" Height="250" Width="150" Closing="Window_Closing" ResizeMode="CanMinimize">
    <Grid>
        <ListBox Margin="10,10,10,10" Name="WordsList" />
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Diagnostics;
using System.Reflection;
using System.Threading;
using Microsoft.Office.Interop.Word;

namespace AllHebrewWords
{
    public partial class CreateDictionary : System.Windows.Window
    {
        private Application app = null;
        private _Document doc = null;
        private Thread thread = null;
        object oMissing = Missing.Value;

        public CreateDictionary()
        {
            InitializeComponent();

            app = new Application();
            object visible = false;
            doc = app.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref visible);

            thread = new Thread(SearchThread);
            thread.Start();
        } // End of function

        public void SearchThread()
        {
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            for (char ch = 'א'; ch <= 'ת'; ch++)
            {
                AddLetter(ch.ToString());
            } // End of for

            object FileName = "C:/Words";
            object FileFormat = WdSaveFormat.wdFormatText;
            doc.SaveAs( ref FileName, ref FileFormat, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            stopwatch.Stop();

            Dispatcher.Invoke((ThreadStart)delegate() { WordsList.Items.Add("Dictionary ready"); });
            Dispatcher.Invoke((ThreadStart)delegate() { WordsList.Items.Add(stopwatch.Elapsed); });
            Dispatcher.Invoke((ThreadStart)delegate() { WordsList.ScrollIntoView(WordsList.Items[WordsList.Items.Count - 1]); });
        } // End of function

        public bool CheckWord(string word)
        {
           if (app.CheckSpelling(word))
        {
            doc.Words.Last.InsertAfter(word + '\n');
            return true;
        }
        return false;
        } // End of function

        public void AddLetter(string word)
        {
            CheckWord(word);

            if (word.Length < 3)
            {
                char ch = word[word.Length - 1];

                for (ch = 'א'; ch <= 'ת'; ch++)
                {
                    word += ch;
                    AddLetter(word);
                    word = word.Remove(word.Length - 1);
                } // End of for
            } // End of if
        } // End of function

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            object saveChanges = false;
            doc.Close(ref saveChanges, ref oMissing, ref oMissing);
            thread.Abort();
            app.Quit(ref saveChanges, ref oMissing, ref oMissing);
        } // End of function
    } // End of class
} // End of namespace
...