Это длинный вопрос о глупой проблеме, которая не является жизненно важной для моего приложения, но все же очень странной.Мне кажется, если я это понимаю, это поможет мне лучше понять c # / wpf.
Я работаю над приложением для загрузки файла Excel в MySQL.В текстовом поле журнала я хочу показать, когда строки в базе данных удаляются.После загрузки новых данных в базу данных в текстовом поле журнала должно появиться сообщение с количеством затронутых строк.
Текстовое поле связывается с
<TextBox x:Name="ConnectionLogTbx" Text="{Binding ConnectionLogText}" />
Код ниже (некоторые строки опущены): ConnectionLogText добавляется со строкой.Сначала дата + время "удалено".Второй раз с номерами строк пострадали.
Вставка базы данных занимает около 2 секунд.Я ожидаю, что появится первое сообщение журнала, затем пауза на две секунды (когда вставляются новые строки), а затем второе сообщение журнала.Самое смешное, что Textbox обновляется обеими строками после операции вставки.Никакие сообщения журнала не появляются перед операцией вставки.Показанное время соответствует ожидаемому с интервалом около 2 секунд.
Однако, если я добавлю messagebox.show в установщик для свойства (и, следовательно, создаю паузу), приложение будет работать так, как ожидается.Первое сообщение журнала появляется в текстовом поле, и после щелчка окна сообщения происходит операция вставки, после чего появляется второе сообщение журнала.
Похоже, что WPF требуется перерыв для обновления текстового поля, но этоне соответствует тому, что я понимаю о WPF.
Может ли кто-нибудь мне помочь?
public partial class MainWindow : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string connectionLogText ="";
public string ConnectionLogText
{
get { return connectionLogText; }
set
{
if (value != connectionLogText)
{
connectionLogText = value;
OnPropertyChanged("ConnectionLogText");
//MessageBox.Show(""); //THIS IS THE MESSAGEBOX
}
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void BrowseImportFile_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == true)
{
ImportFilePathTbx.Text = openFileDialog.FileName;
ImportFileBtn.IsEnabled = true;
}
}
private void ImportFileBtn_Click(object sender, RoutedEventArgs e)
{
string connString =
ConfigurationManager.ConnectionStrings["connSTring"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
//here the content of the current db table is deleted
conn.Close();
ConnectionLogText += DateTime.Now.ToString("hh:mm:ss.fff") + "
Deleted" + "\r\n";
conn.Open();
int numberOfRowsAffected = 0;
foreach (DataRow dataRow in table.Rows)
{
//new data inserted into database numberOfRowsAffected++;
}
conn.Close();
ConnectionLogText += DateTime.Now.ToString("hh:mm:ss.fff") + " " +
numberOfRowsAffected + " rows inserted" + "\r\n" ;
}
}