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()タイプの変数を使用しているようMainWindowです。正確に何MainWindow._recognizer.UnloadGrammarが行われるかはわかりませんが、使用しない限り、そこにあるUI要素にアクセスしないようにしControl.Invokeてください。

于 2012-05-15T08:12:27.297 に答える
4

Thread.Startを呼び出して、スレッドの実行をスケジュールする必要があります。

于 2012-05-15T08:12:50.883 に答える