Приемник трассировки для записи в текстовое поле (приложение WPF)

Все предоставленные ответы хороши и (вероятно) работают Однако, они должны загрузить файл в память (в целом или частично). Мы знаем, что Python не очень эффективен в этом виде задач (или по крайней мере не так эффективно, как уровень ОС управляет).

я нашел, что следующее является самым эффективным способом сделать это:

import os

MAX_NUM_LINES = 1000
FILE_NAME = "input_file.txt"
SPLIT_PARAM = "-d"
PREFIX = "__"

if os.system(f"split -l {MAX_NUM_LINES} {SPLIT_PARAM} {FILE_NAME} {PREFIX}") == 0:
    print("Done:")
    print(os.system(f"ls {PREFIX}??"))
else:
    print("Failed!")

Read больше приблизительно split здесь: https://linoxide.com/linux-how-to/split-large-text-file-smaller-files-linux /

14
задан kjv 7 September 2009 в 12:46
поделиться

3 ответа

Я использую это для Winforms C #, должно быть легко настраивается на wpf

public class MyTraceListener : TraceListener
{
    private TextBoxBase output;

    public MyTraceListener(TextBoxBase output) {
        this.Name = "Trace";
        this.output = output;
    }


    public override void Write(string message) {

        Action append = delegate() {
            output.AppendText(string.Format("[{0}] ", DateTime.Now.ToString()));
            output.AppendText(message); 
        };
        if (output.InvokeRequired) {
            output.BeginInvoke(append);
        } else {
            append();
        }

    }

    public override void WriteLine(string message) {
        Write(message + Environment.NewLine);
    }
}

Используйте его как

TraceListener debugListener = new MyTraceListener (theTextBox);
Debug.Listeners.Add(debugListener);
Trace.Listeners.Add(debugListener);

Не забудьте Trace / Debug.Listeners.Remove (debugListener); когда он вам больше не нужен.

22
ответ дан 1 December 2019 в 07:19
поделиться

Как насчет реализации настраиваемого TraceListener, который просто добавляет сообщения трассировки к строке? Затем вы представляете эту строку как свойство, реализуете INotifyPropertyChanged и привязываете к этому свойству элемент управления TextBox.

Примерно так:

public class MyTraceListener : TraceListener, INotifyPropertyChanged
{
    private readonly StringBuilder builder;

    public MyTraceListener()
    {
        this.builder = new StringBuilder();
    }

    public string Trace
    {
        get { return this.builder.ToString(); }
    }

    public override void Write(string message)
    {
        this.builder.Append(message);
        this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
    }

    public override void WriteLine(string message)
    {
        this.builder.AppendLine(message);
        this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, e);
        }
    }
}

Вам нужно добавить этот TraceListener в список активных слушателей:

Trace.Listeners.Add(new MyTraceListener());
12
ответ дан 1 December 2019 в 07:19
поделиться

вы можете добавить настраиваемый прослушиватель, который обновляет свойство Textbox.Text. Следовательно, необходимо унаследовать от абстрактного базового класса TraceListener и переопределить один из методов TraaceData, TraceEvent, TraceTransfer.

0
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

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