WPF - C-Sharp - Buttons mit Thread bearbeiten
Hey zusammen,
Gibt es eine Möglichkeit, die Buttons eines Fensters mit einem separaten Thread zu aktualisieren? Habe ich eine GUI entwickelt, mit der man eine PDF Datei unter einem bestimmten Ordner öffnen kann. Während dem Öffnen, bzw. dem bearbeiten der Datei sollen einige Buttons in der Anwendung gesperrt sein.
Nachdem diese gespeichert wurde, sollen diese Buttons aktiviert werden und aktivierbar sein. Deshalb hatte ich die Idee, beim Öffnen der PDF-Datei einen Thread zu starten, der überprüft, ob sich das Änderungsdatum der Datei ändert. Falls ja, soll er die Buttons aktualisieren.
Hier der Code für den Thread:
Wenn ich nun die Methode EnableButtons aufrufe, welche einfach alle übergebenen Buttons auf IsEnabled setzt, erhalte ich eine Exception, dass diese Objekte einem anderen Thread angehören.
Nach dem nachforschen im Internet habe ich folgenden Beitrag gefunden:
https://mycsharp.de/forum/threads/33113/faq-controls-von-thread-aktualis ...
Deshalb habe ich den dort beschriebenen Code für meine EnableButtons-Methode implementiert:
Die mit den "xxxxxxxxxxxxxxx" markierte Zeile gibt mir im Debugger dann aber folgende Antwort:
Was genau ist das denn für ein Pfad der dort durchsucht wird? Ein Laufwerk f:\ habe ich nicht, was also ist "f:\dd\..." ?
Das erste mal, als die Nachricht delegate.cs nicht gefunden kam, hatte ich außerdem die Möglichkeit, NuGet und noch eine Seite anzuhaken die durchsucht werden sollten.
Gruß Micha
Gibt es eine Möglichkeit, die Buttons eines Fensters mit einem separaten Thread zu aktualisieren? Habe ich eine GUI entwickelt, mit der man eine PDF Datei unter einem bestimmten Ordner öffnen kann. Während dem Öffnen, bzw. dem bearbeiten der Datei sollen einige Buttons in der Anwendung gesperrt sein.
Nachdem diese gespeichert wurde, sollen diese Buttons aktiviert werden und aktivierbar sein. Deshalb hatte ich die Idee, beim Öffnen der PDF-Datei einen Thread zu starten, der überprüft, ob sich das Änderungsdatum der Datei ändert. Falls ja, soll er die Buttons aktualisieren.
Hier der Code für den Thread:
public partial class ProcessingPage : Page
{
private FileInfo file;
public Thread thread { get; }
public ProcessingPage(FileInfo file)
{
InitializeComponent();
this.window = window;
this.file = file;
textblock.Text = file.FullName;
thread = new Thread(new ThreadStart(Wait_FileSaved));
thread.Start();
}
/// <summary>
/// Waits until the file has been edited
/// </summary>
/// <param name="file">file to get processed</param>
private void Wait_FileSaved()
{
Console.WriteLine("{0} | {1}", file.LastWriteTimeUtc, new FileInfo(file.FullName).LastWriteTimeUtc);
while (file.LastWriteTimeUtc.Equals(new FileInfo(file.FullName).LastWriteTimeUtc))
{
Thread.Sleep(2000);
}
Console.WriteLine("Datei geändert");
//Write-Log
EnableButtons(btnChecked, btnDenied, btnDenied, btnPreChecked, btnClarify, btnPass);
}
}
Wenn ich nun die Methode EnableButtons aufrufe, welche einfach alle übergebenen Buttons auf IsEnabled setzt, erhalte ich eine Exception, dass diese Objekte einem anderen Thread angehören.
Nach dem nachforschen im Internet habe ich folgenden Beitrag gefunden:
https://mycsharp.de/forum/threads/33113/faq-controls-von-thread-aktualis ...
Deshalb habe ich den dort beschriebenen Code für meine EnableButtons-Methode implementiert:
private bool EnableButtons(params Button[] buttons)
{
if (!this.Dispatcher.CheckAccess())
return (bool)this.Dispatcher.Invoke((Func<Button[], bool>)EnableButtons, buttons); xxxxxxxxxxxxxxx
foreach (Button button in buttons)
button.IsEnabled = true;
return true;
}
Die mit den "xxxxxxxxxxxxxxx" markierte Zeile gibt mir im Debugger dann aber folgende Antwort:
Was genau ist das denn für ein Pfad der dort durchsucht wird? Ein Laufwerk f:\ habe ich nicht, was also ist "f:\dd\..." ?
Das erste mal, als die Nachricht delegate.cs nicht gefunden kam, hatte ich außerdem die Möglichkeit, NuGet und noch eine Seite anzuhaken die durchsucht werden sollten.
Gruß Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6807934650
Url: https://administrator.de/forum/wpf-c-sharp-buttons-mit-thread-bearbeiten-6807934650.html
Ausgedruckt am: 21.12.2024 um 15:12 Uhr