Хорошо, я пытаюсь написать программу, которая будет сканировать кучу слов, чтобы сопоставить их с набором букв. Я хочу, чтобы отображались все слова, содержащие буквы, введенные пользователем, и я хочу, чтобы эти слова отображались во время поиска программы. Поэтому я должен разделить поиск на его собственную ветку, отдельную от потока пользовательского интерфейса. Достаточно просто.
Вот что у меня получилось (упрощенно для одного результата TextBox. В моем маленьком проекте я разбил слова на 4 разных TextBox в зависимости от длины слова).
static string _challengeString;
static string[][] _categorizedWords = new string[26][];
Thread _letterSearch = new Thread(new ParameterizedThreadStart(_SearchForWords);
public MainForm()
{
// do the work to load the dictionary into the _categorizedWords variable
// 0 = A, 1 = B, .., 24 = Y, 25 = Z;
// build the form which contains:
// 1 TextBox named _entryChars for user entry of characters
// 1 Button named _btnFind
// 1 TextBox named _Results
InitializeComponent;
}
private void FindButton_Click(object sender, EventArgs e)
{
_letterSearch.Abort();
_letterSearch.IsBackground = true;
_challengeString = _entryChars.Text;
_Results.Text = "";
for (int letterIndex = 0; letterIndex < 26; letterIndex++)
{
_letterSearch.Start(letterIndex);
}
_entryChars.Text = "";
}
static void _SearchForWords(object letterIndex)
{
Regex matchLetters = new Regex( _challengeString, RegexOptions.IgnoreCase | RegexOptions.Compiled );
foreach (string word in _categorizedWords[(int)letterIndex])
{
if ( matchLetters.Match(word).Success )
{
_InsertWord(word);
}
}
}
delegate void InsertWord(string word);
public static void _InsertWord(string word)
{
_Results.Text += word + "\n";
}
Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь передать слово обратно в функцию делегата _InsertWord и присвоить его _Results.Text, он дает мне «Ссылка на объект требуется статическое поле, метод или свойство "сообщение на _Results.Text. Я не уверен, что он хочет, чтобы я сделал.
Я ценю помощь!