我对多线程还很陌生,今天遇到了一个奇怪的问题。我遵循了一些在线教程,在我看来,我在做什么是正确的。

所以我得到了这段代码:

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

09-25 22:08