私はスレッド化に比較的慣れていないので、これを正しく行っているかどうかはわかりません。
私の現在のアプリケーションでは、マルチタブのナビゲーション フォームがあり、その一部には他のフォームにつながるボタンがあり、一部にはテーブルがあり、一部には両方があります。そのようなものには、エントリを追加するボタンと、ストアド プロシージャを介してプルされたその日のすべてのエントリを示すテーブルがあります。
その 2 番目のフォームをダイアログとして開いたとき、作成したメソッドを呼び出してテーブルを更新するのは簡単でしたが、そのように遅くなりました。代わりに、信じられないほど高速に実行される別のスレッドとして呼び出しを開始しましたが、スレッドが終了したときにメソッドを呼び出す方法が見つからないようです。しばらく検索しましたが、有効な解決策が見つかりませんでした。
コードは次のとおりです。
public static void ThreadProcAddEntry()
{
Application.Run(new AddEntry());
}
private void btnAdd_Click(object sender, EventArgs e)
{
System.Threading.Thread t = new Thread(new ThreadStart(ThreadProcAddEntry));
t.Name = "AddEntry";
t.Start();
}
と
public void GetMyEntries(string username)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB2"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SP_GetUserEntries", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserID", SqlDbType.VarChar).Value = username;
conn.Open();
cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
using (reader)
{
DataTable table = new DataTable();
table.Load(reader);
dgvMyEntry.DataSource = table;
dgvMyEntry.AllowUserToAddRows = false;
dgvMyEntry.ReadOnly = true;
dgvMyEntry.AutoResizeColumns();
dgvMyEntry.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
}
}
}
AddEntryForm の [Submit] ボタンをクリックするとすぐに発生する (SQL に送信した後、dispose メソッドを実行する) スレッドの終了時に GetMyEntries メソッドを実行することをどのように提案しますか?