יש לי קוד בc# שקורא כמות של קבצים בבת אחת (בעצם תוכנת חיפוש פשוטה שאמורה לשמש את מי שאין לו מקום במחשב בשביל אינדקס) וכדי למהר את הפעולה אני משמתמש בThreading
נתקלתי בבעיה שאני לא מצליח לעדכן את הprogressbar תוך כדי פעולת הthreading כדי להראות התקדמות. (בwinforms הצלחתי על ידי invoke).
ניסיתי על ידי Dipatcher ללא הועיל.
ניסיתי על ידי Binding ללא הועיל.
בעצם מה שקורה שאם אני עושה פעולת דמע
Thread.Sleep(100); // Simulating some work being done
אז הכל טוב
אבל ברגע שאני מתחיל לקרוא קבצים שום כלום.
מצו"ב הקוד שלי של הbinding אשמח לקבל עזרה
<Window x:Class="WPF_BInding.ProgressBarBinding"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF_BInding"
mc:Ignorable="d"
Title="ProgressBarBinding" Height="450" Width="800">
<Grid>
<StackPanel>
<ProgressBar Height="25" Name="progressBar" Minimum="0" Maximum="100" Value="{Binding PercentDone}" />
<Button Content="Start Task" HorizontalAlignment="Center" VerticalAlignment="Bottom" Click="StartTask_Click" />
</StackPanel>
</Grid>
</Window>
public partial class ProgressBarBinding : Window, INotifyPropertyChanged
{
private int _percentDone;
private int _progressBarMaximum = 100;
public int PercentDone
{
get { return _percentDone; }
set
{
if (_percentDone != value)
{
_percentDone = value;
OnPropertyChanged(nameof(PercentDone));
}
}
}
public int ProgressBarMaximum
{
get { return _progressBarMaximum; }
set
{
if (_progressBarMaximum != value)
{
_progressBarMaximum = value;
OnPropertyChanged(nameof(ProgressBarMaximum));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ProgressBarBinding()
{
InitializeComponent();
DataContext = this; // Set the data context to the MainWindow itself
progressBar.Maximum = ProgressBarMaximum; // Set the initial Maximum value
}