単語を生成し、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