1

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

所以我得到了这个代码:

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() 方法似乎永远不会被调用。我不知道问题出在哪里,因此将不胜感激任何帮助。谢谢 :)

4

2 回答 2

5

您需要调用thread.Start()以启动线程。

另一方面,它似乎threadUnloadGrammar()使用了 type 的变量MainWindow。不确定到底MainWindow._recognizer.UnloadGrammar是什么,但请确保它不会访问其中的任何 UI 元素,除非它Control.Invoke用于此目的。

于 2012-05-15T08:12:27.297 回答
4

您需要调用Thread.Start来安排执行线程。

于 2012-05-15T08:12:50.883 回答