MSBuild ReadLinesFromFile весь текст в одну строку

Хорошо, что вы удалили Thread.sleep, так как ваш пользовательский интерфейс не реагирует на эти 2 секунды.

Что вы можете сделать, это запустить Timer, который запускается только один раз:

int delay = 2000;
Timer timer = new Timer( delay, new ActionListener(){
  @Override
  public void actionPerformed( ActionEvent e ){
    jLabel12.setForeground( Color.red );
  }
} );
timer.setRepeats( false );
timer.start();

Обратите внимание, что Timer является javax.swing.Timer, что гарантирует, что метод actionPerformed для ActionListener вызывается в потоке отправки событий, соблюдая правила потоковой передачи Swing.

Это также возможно с помощью SwingWorker, но для этого я буду придерживаться Timer. Если вы хотите использовать SwingWorker, вы можете просто использовать Thread.sleep в методе doInBackground() и обновить JLabel в методе done().

Что-то в строках

class Delay extends SwingWorker<Void, Object> {
 @Override
 public void doInBackground() {
  Thread.sleep( 2000 );
 }

 @Override
 protected void done() {
   jLabel12.setForeground( Color.red );
 }
}
13
задан evilhomer 8 November 2008 в 11:19
поделиться

2 ответа

Проблема здесь - Вы, используют ReadLinesFromFile задача способом, это не было предназначено.

Чтения Задачи
ReadLinesFromFile список объекты от текстового файла.

, Таким образом, это только читает весь текст из файла, это читает отдельные объекты из файла и возвращает группу объекта ITaskItems. Каждый раз, когда Вы производите список объектов с помощью @() синтаксис, Вы получите разделенный список, значение по умолчанию которого является точкой с запятой. Этот пример иллюстрирует это поведение:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build"    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

    <ItemGroup>
        <Color Include="Red" />
        <Color Include="Blue" />
        <Color Include="Green" />
</ItemGroup>

<Target Name="Build">
        <Message Text="ItemGroup Color: @(Color)" />
</Target>

</Project>

И вывод похож на это:

  ItemGroup Color: Red;Blue;Green

Поэтому, в то время как лучшее решение Вашей проблемы состоит в том, чтобы записать задачу MSBuild, которая читает файл в свойство как строка не список объектов, это действительно не, что Вы попросили. Вы спросили, был ли путь для откладывания их, и там использует , MSBuild Преобразовывает .

Преобразования используются, чтобы создать один список от другого и также иметь способность преобразовать использование пользовательского разделителя. Таким образом, ответ должен преобразовать Ваше чтение списка в использование ReadItemsFromFile в другой список с новыми строками. Вот пример, который делает просто что:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

    <ItemGroup>
        <File Include="$(MSBuildProjectDirectory)\Test.txt" />
    </ItemGroup>

    <Target Name="Build">
        <ReadLinesFromFile File="@(File)">
            <Output TaskParameter="Lines" ItemName="FileContents" />
        </ReadLinesFromFile>

        <Message Text="FileContents: @(FileContents)" />
        <Message Text="FileContents Transformed: @(FileContents->'%(Identity)', '%0a%0d')" />
    </Target>

</Project>

Test.text похож:

Red
Green
Blue

И вывод похож на это:

[C:\temp]:: msbuild test.proj
Microsoft (R) Build Engine Version 3.5.21022.8
[Microsoft .NET Framework, Version 2.0.50727.1433]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 11/8/2008 8:16:59 AM.
Project "C:\temp\test.proj" on node 0 (default targets).
  FileContents: Red;Green;Blue
  FileContents Transformed: Red
Green
Blue
Done Building Project "C:\temp\test.proj" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.03

, Что продолжается вот, две вещи.

@(FileContents->'%(Identity)', '%0a%0d')   
  • Мы преобразовываем список от одного типа до другого использования тех же значений (Identity), но пользовательский разделитель '%0a%0d'
  • Мы используем MSBuild, Выходящий для выхода из перевода строки (%0a) и возврат каретки (%0d)
41
ответ дан casperOne 8 November 2008 в 11:19
поделиться
  • 1
    Я не рекомендовал бы обновить до VS2010 в настоящее время, большинство компаний имеет рациональную политику не обновления до новых версий перед первым пакетом обновления (некоторые даже перед первыми двумя). 2010 VS приносит много интересных дополнений, но это в лучшем случае все еще ошибочно. – Tommy Andersen 20 November 2010 в 19:36

Вместо @ (FileContents -> '% (Identity)', '% 0a% 0d') я считаю, что вы можете использовать @ (FileContents, '% 0a% 0d')

4
ответ дан 1 December 2019 в 17:12
поделиться
Другие вопросы по тегам:

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