Все, что делает метод Refresh в форме, это делает ее недействительной, затем вызывает Update (что сводится к вызову UpdateWindow )
Одним из способов решения вашей проблемы является использование объекта FileSystemWatcher для отслеживания изменений в вашем текстовом файле. Когда изменение обнаружено, он может вызвать ваш код, который открывает файл и выводит данные на ваш ярлык.
FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = @"c:\temp"; // path to file
fsw.Filter = "yourfile.txt";
fsw.Changed += fsw_Changed;
fsw.EnableRaisingEvents = true;
Тогда в вашем измененном событии вы только что определили
void fsw_Changed(object sender, FileSystemEventArgs e)
{
updateLabelFromTextFile();
}
private void updateLabelFromTextFile()
{
var fs = File.OpenText(@"c:\temp\yourfile.txt");
string sContent = fs.ReadToEnd();
fs.Close();
fs.Dispose();
if (label1.InvokeRequired)
{
MethodInvoker mi = delegate { label1.Text = sContent; };
this.BeginInvoke(mi);
}
else
label1.Text = sContent;
}
Обратите внимание, что события FileSystemWatcher генерируются в отдельном потоке, поэтому требуется BeginInvoke.
Вот ссылка на пример (просто выполните поиск в FileSystemWatcher, и вы найдете множество других примеров).