0

を使用して新しいスレッドを開始していDisplay.getDefault().asyncExec()ます。スレッドは次のようなことを行います。

public void run()
{
    while (! condition)
    {
      //do some processing
      mainWindow.updateStatus(..); //this will call a setText method on a label in 
                    //the original thread
    }
}

ただし、このスレッドを実行すると、ラベルにステータスがスムーズに表示されるのではなく、プログラムがハングします。私は何を間違っていますか?

4

2 に答える 2

4

スレッドの概念を誤解しています。スレッドと呼ぶものは、実際には (UI) スレッドで実行するようにスケジュールしたコードの一部です。

原則として、UI スレッドのコードはすばやく実行され、できるだけ早く返される必要があります。while ループは、この規則に違反している可能性が最も高いです。解決策は、UI スレッド (run メソッド) からループを取り除き、Display.asyncExec()呼び出しの周りに配置することです。

于 2013-09-27T07:59:28.863 に答える