У меня есть длительная задача, которая манипулирует NSMutableAttributedString. Эта манипуляция включает в себя проверку шрифтов, таких как:
bold = (pfont.FontDescriptor.SymbolicTraits & NSFontSymbolicTraits.BoldTrait) != 0;
и создание шрифтов для настройки текста, таких как:
var fontmgr = NSFontManager.SharedFontManager;
font = fontmgr.FontWithFamily(fontname,
(bold ? NSFontTraitMask.Bold : 0) |
(italic ? NSFontTraitMask.Italic : 0),
5, size);
Я не хочу останавливать поток пользовательского интерфейса, пока это происходит, поэтому я надеюсь выполнить эту манипуляцию в фоновом потоке. Обратите внимание, что я не касаюсь любых элементов пользовательского интерфейса во время этой обработки - просто изменяю NSAttributedString.
Вы можете сделать некоторые манипуляции с NSAttributedString в фоновом потоке, но это кажется, что касание шрифтов является верботеном, так как вызывает AppKitThreadAccessException.
Поэтому мне нужно запустить мои манипуляции в потоке пользовательского интерфейса, и я ищу способ получить куски процессорного времени. В идеале был бы способ периодически возвращать sh контроль, как в старые добрые времена совместной многозадачности - что-то вроде этого:
var paragraphs = myBigLongAttributedString.BreakIntoParagraphs(); // this is fast.
foreach (var paragraph in paragraphs) {
// do some work on the paragraph
relinquish control
}
или добавлять абзацы в рабочую очередь, которая обрабатывается в пользовательском интерфейсе. нить.
Большое спасибо за любые идеи.
Приветствия.
Пол