我对多线程还很陌生,今天遇到了一个奇怪的问题。我遵循了一些在线教程,在我看来,我在做什么是正确的。
所以我得到了这段代码:
GrammarThreading gThread = new GrammarThreading(this, grammar);
Thread thread = new Thread(new ThreadStart(gThread.threadUnloadGrammar));
使用它,我想将语法卸载到另一个线程,因为这需要花费几秒钟的时间。这是GrammarThreading类的样子:
public class GrammarThreading
{
public MainWindow window { get; set; }
public Grammar grammar { get; set; }
public GrammarThreading(MainWindow _window, Grammar _grammar)
{
window = _window;
grammar = _grammar;
}
public void threadUnloadGrammar()
{
window._recognizer.UnloadGrammar(grammar);
}
}
但是,我调试了代码,似乎从未调用threadUnloadGrammar()方法。我不知道问题可能是什么,所以将不胜感激任何帮助。谢谢 :)
最佳答案
您需要调用thread.Start()
来启动线程。
另一方面,threadUnloadGrammar()
似乎使用了MainWindow
类型的变量。不知道MainWindow._recognizer.UnloadGrammar
到底能做什么,但是确保它不会访问那里的任何UI元素,除非它为此使用 Control.Invoke
。