Вы также можете создать один экземпляр вашего рисования подпрограмм, когда не требуется никаких аргументов:
final Runnable tableDrawer = new Runnable()
{
@Override
public void run()
{
/* Update your TableViewer here */
}
};
затем в коде, просто используйте:
Display.getDefault().asyncExec(tableDrawer);
Несколько способов оптимизации: если вы уже находитесь в showthread, вы можете вызвать метод run самостоятельно - в противном случае запустите его asyncExec.
Вы можете создать вспомогательный класс для выполнения этих задач. Класс-помощник может проверить, находитесь ли вы в или из потока отображения, отслеживаете количество раз, когда используется процедура рисования, и предупреждайте вас, когда задача рисования занимает слишком много времени для выполнения. (Все, что более 1000 миллисекунд, вероятно, не очень хорошо, и должно быть завершено в диалоговом окне прогресса.)
Если вы делаете много обновлений графического интерфейса, сгруппируйте их, чтобы сделать как можно больше в одном рисование «runnable» события. Например, если вы рисуете строки текста на консоль, не нарисуйте одну строку для каждой строки текста, вместо этого нужно иметь ArrayList строк, которые нужно нарисовать .. затем вызвать ничью, когда list.size() == 1. Когда появляется много строк текста, ускорение будет драматичным.
Что вы подразумеваете под "_How, чтобы сделать этот метод_"? Вам всегда придется поместить ваш код в «Runnable», по крайней мере, поэтому вам нечего экономить. Просто из любопытства, почему вы так часто так поступаете? – Baz
BTW, очень родственный: [код передачи как параметр] (http://stackoverflow.com/questions/8657948/passing-code-as-parameter) – Baz
Эта часть кода является стандартным способом в SWT для обновления GUI из другого потока это не поток GUI. Я часто использую этот код в своем приложении, и я ищу способ сократить его, например, сделать это как метод. Так что вопрос. Но Ты помог мне с этим связанным вопросом. Спасибо. – marioosh