Вид и каталог дисплея перечисляют в алфавитном порядке использующий opendir () в php

Вы должны использовать свойство Control.InvokeRequired , чтобы определить, находитесь ли вы в фоновом потоке. Затем вам нужно вызвать свою логику, которая изменила ваш пользовательский интерфейс, с помощью метода Control.Invoke , чтобы заставить ваши операции пользовательского интерфейса происходить в основном потоке. Вы делаете это путем создания делегата и передачи его методу Control.Invoke . Подвох здесь в том, что вам нужен какой-то объект, полученный из Control для вызова этих методов.

Редактировать : Как другой пользователь опубликовал сообщение, если вы можете подождать, пока событие BackgroundWorker.Completed обновит ваш пользовательский интерфейс, вы можете подписаться на это событие и напрямую вызвать свой код пользовательского интерфейса. , BackgroundWorker_Completed вызывается в главном потоке приложения. мой код предполагает, что вы хотите делать обновления во время операции. Одной из альтернатив моего метода является подписка на событие BwackgroundWorker.ProgressChanged , но я считаю, что вам все равно придется вызывать Invoke для обновления вашего интерфейса в этом случае.

например

public class UpdateController
{
    private UserController _userController;        
    BackgroundWorker backgroundWorker = new BackgroundWorker();

    public UpdateController(LoginController loginController, UserController userController)
    {
        _userController = userController;
        loginController.LoginEvent += Update;
    }

    public void Update()
    {                        
         // The while loop was unecessary here
         backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
         backgroundWorker.RunWorkerAsync();                 
    }

    public delegate void DoUIWorkHandler();


    public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
       // You must check here if your are executing on a background thread.
       // UI operations are only allowed on the main application thread
       if (someControlOnMyForm.InvokeRequired)
       {
           // This is how you force your logic to be called on the main
           // application thread
           someControlOnMyForm.Invoke(new             
                      DoUIWorkHandler(_userController.UpdateUsersOnMap);
       }
       else
       {
           _userController.UpdateUsersOnMap()
       }
    }
}
14
задан felixthehat 19 May 2009 в 20:55
поделиться

3 ответа

Вам нужно сначала прочитать ваши файлы в массиве, прежде чем вы сможете их отсортировать. Как насчет этого?

<?php
$dirFiles = array();
// opens images folder
if ($handle = opendir('Images')) {
    while (false !== ($file = readdir($handle))) {

        // strips files extensions      
        $crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    

        $newstring = str_replace($crap, " ", $file );   

        //asort($file, SORT_NUMERIC); - doesnt work :(

        // hides folders, writes out ul of images and thumbnails from two folders

        if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {
            $dirFiles[] = $file;
        }
    }
    closedir($handle);
}

sort($dirFiles);
foreach($dirFiles as $file)
{
    echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\"  </a></li>\n";
}

?>

Edit: Это не связано с тем, о чем вы спрашиваете, но вы также можете получить более общую обработку расширений файлов с помощью функции pathinfo () . Тогда вам не понадобится жестко запрограммированный массив расширений, вы можете удалить любое расширение.

23
ответ дан 1 December 2019 в 07:19
поделиться
$directory = scandir('Images');
0
ответ дан 1 December 2019 в 07:19
поделиться

Примечание: Переместите это в цикл foreach, чтобы переменная newstring была переименована правильно.

// strips files extensions      
$crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    

$newstring = str_replace($crap, " ", $file );
1
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: