在运行时从txt文件更新文本框而不单击"刷新"

Flu*_*ufy 5 c# wpf xaml

在wpf中,我有一个文本框,它的内容来自txt文件.

在代码behine看起来像:

public MyWindow()
{
    InitializeComponent();
    ReadFromTxt();
}
void Refresh(object sender, RoutedEventArgs e)
{
    ReadFromTxt();
}

void ReadFromTxt()
{
    string[] lines = System.IO.File.ReadAllLines(@"D:\Log.txt");
    foreach (string line in lines)
    {
        MyTextBox.AppendText(line + Environment.NewLine);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是txt文件内容在运行时期间正在发生变化,是否可以与这些更改同步?我的意思是如果改变txt文件,文本框内容将会改变.如果有可能请提供一些代码示例ic#或XAML.

我现在的解决方案是我创建了一个"刷新"按钮,可以从txt文件中再次读取

Ade*_*mak 3

您可以配置FileSystemWatcher. 我添加了FileWatcherConfigure函数作为示例。

每当文件更改时,FileChanged事件就会被发布。您应该RefreshTextbox使用该事件触发该方法。

FileSystemWatcher fileWatcher = new FileSystemWatcher();
string filePath = @"./Log.txt";
public MainWindow()
{
    InitializeComponent();

    ReadFromTxt();
    FileWatherConfigure();
}

public void FileWatherConfigure()
{
    fileWatcher.Path = System.IO.Path.GetDirectoryName(filePath);
    fileWatcher.Filter = System.IO.Path.GetFileName(filePath);
    fileWatcher.Changed += FileWatcher_Changed;
    fileWatcher.EnableRaisingEvents = true;
}

private void FileWatcher_Changed(object sender, FileSystemEventArgs e)
{
    Thread.Sleep(TimeSpan.FromSeconds(1));

    ReadFromTxt();
}


void ReadFromTxt()
{
    string[] lines = System.IO.File.ReadAllLines(filePath);
    MyTextBox.Dispatcher.Invoke(() => { this.MyTextBox.Text = string.Join(Environment.NewLine, lines); });
}
Run Code Online (Sandbox Code Playgroud)