próbuję zrobić coś takiego że podczas wczytywania danych w głównym wątku wyświetla się okno “proszę czekać” dopóki wczytywanie się nie skończy. Szukałem różnych rozwiązań z wątkami ale nie wiem jak to zrobić:/
Na głównej formie mam datagrid z button. Po wciśnięciu buttona ładują się dane z bazy danych i w tym czasie chce wyświetlić to okienko i żeby się samo zamknęło gdy już wszystko się wczyta. Jak to zrobić na wątkach?
public partial class Main : Form
{
NpgsqlConnection conn = new NpgsqlConnection("server=127.0.0.1;Port=5432;User Id=dba; Password=; Database=postgres");
public Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
NpgsqlCommand comm = new NpgsqlCommand("select * from dane", conn);
NpgsqlDataAdapter da = new NpgsqlDataAdapter(comm);
DataTable dt = new DataTable();
da.Fill(dt);
dgvTest.DataSource = dt;
this.dgvTest.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using Npgsql;
using System.Threading;
namespace linq
{
public partial class Main : Form
{
private string lvLogin = "";
private int lvUprawnienia;
private string lvQuery = "select * from uzytkownik";
private SqlInterface sql;
public Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
public void Wyswietl()
{
sql = new SqlInterface();
sql.Connect();
sql.Bind_JOIN(lvQuery,dgvTest);
this.dgvTest.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender;
}
private void Main_Load(object sender, EventArgs e)
{
if (Login.Equals(""))
{
logon lo = new logon();
try
{
lo.Login = "";
this.Enabled = false;
this.Visible = false;
lo.ShowDialog();
if (lo.Login.Equals(""))
{
Close();
}
Login = lo.Login;
Uprawnienia = lo.Uprawnienia;
}
finally
{
this.Enabled = true;
this.Visible = true;
lo.Close();
}
}
}
public string Login
{
get { return lvLogin; }
set { lvLogin = value; }
}
public int Uprawnienia
{
get { return lvUprawnienia; }
set { lvUprawnienia = value; }
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
wait wt = new wait();
wt.Show();
Thread th = new Thread(new ThreadStart(this.Wyswietl));
th.Start();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
wait wt = new wait();
wt.Close();
}
}
}
i mam błąd: “Nieprawidłowa operacja między wątkami: do formantu ‘dgvTest’ uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony.” i nie wiem jak to poprawić, macie jakiś pomysł?