Cross thread

0

Cześć napisałem taki kodzik:

 
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();
            Wyswietl();
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            wait wt = new wait();
            wt.Close();
        }
    }
}

przy kliknięciu w button wyrzuca 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." dgvTest to mój datagrid do którego chce załadować dane z bazy danych, jednak że to trochę trwa to wyświetlam oknko wait z komunikatem "Proszę czekać...". Jak mam to przerobić żeby zadziałało? Z góry dzięki;)

0

Czytałem już wcześniej ale nie wiem jak to wykorzystać niestety:(

1
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    wait wt = new wait();
    wt.Show();
    this.Invoke((MethodInvoker)delegate {
        Wyswietl();
    });
}
0

Dzięki;) ale okno się nie pokazuje:/

1 użytkowników online, w tym zalogowanych: 0, gości: 1