PHP имеет свой собственный встроенный класс, который можно использовать для распаковки или извлечения содержимого из zip-файла. Класс ZipArchive. Ниже приведен простой и простой PHP-код, который будет извлекать zip-файл и помещать его в конкретный каталог:
open('dummy.zip');
$zip_obj->extractTo('directory_name/sub_dir');
?>
Если вы хотите, чтобы некоторые дополнительные функции были ниже, это улучшенный код, который проверяет, файл существует или нет:
open('dummy.zip') === TRUE) {
$zip_obj->extractTo('directory/sub_dir');
echo "Zip exists and successfully extracted";
}
else {
echo "This zip file does not exists";
}
?>
Таким образом, Вы используете, Вызывают в Маршалл назад к потоку UI, взглядами его - который является точно, что необходимо сделать. Я лично использовал бы Action< Исключение> для пользы простоты, и возможно BeginInvoke вместо Вызывают, но в основном Вы делаете правильную вещь.
Используйте класс BackgroundWorker в платформе.NET вместо этого. Это - лучшая практика для выполнения работы UI над другим потоком.
Вероятно, лучший путь состоял бы в том, чтобы передать делегата в поток вместо ссылки на саму форму.
Выдавание исключения между потоками не легко и вероятно не желаемое. вместо этого можно передать исключение с помощью структуры совместно используемых данных или переменной и использовать waitHandle для ожидания на 1-м потоке.