|
![]() |
#1 |
Участник
|
Схема работы с потоками описана здесь
Ошибка времени выполнения в ComExcelDocument_RU.findRange() А практически, получается нечто вроде такого дополнения к твоему классу X++: // Обработка параметров, переданных через пункт меню public Boolean initArgs(Args args) { Boolean ret = true; ; if (! args || ! args.record() || args.dataset() != tablenum(MyTable)) { global::error('Не указан или указан не корректный буфер таблицы-источника'); } else { myTable = args.record(); } return ret; } // Статический метод, вызываемый в отдельном потоке static void runReport(Thread _thread) { container packedArgs; MyClassReport report; Args args = new Args(); packedArgs = _thread.getInputParm(); args.setupArgs('', conpeek(packedArgs, 1), conpeek(packedArgs, 2)); args.record(conpeek(packedArgs, 3)); report = new MyClassReport(); report.initArgs(args); // Передача Args из метода main report.run(); _thread.setOutputParm(infolog.copy(1,infolog.num())); } public static void main(Args args) { Thread thread; MyClassReport report; ; report = new MyClassReport(); if (report.initArgs(args)) { if (report.prompt()) { // report.run(); // Организация отдельного потока. Можно оформить как еще один статический метод класса thread = new Thread(); thread.setInputParm([args.parmEnumType(), args.parmEnum(), args.record()]); thread.removeOnComplete(true); thread.run(classnum(MyClassReport), staticmethodstr(MyClassReport, runReport)); thread.waitUntilSignaled(); infolog.import(thread.getOutputParm()); } } } 1. Использовать методы pack/unpack для передачи переменных, указанных пользователем 2. Дополнить контейнер, передаваемый через thread.setInputParm() нужным количеством значений. Т.е. на этапе отладки класса можешь работать "как обычно", а когда класс будет готов и отлажен, "обернуть" его вызов в отдельный поток.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|