0

説明が少し曖昧であることを私は知っているので、より良い説明です。

毎分更新されるタイマーが付いた1つの開いているForm1があります。

しかし、私は別のform2で作業しており、Form1が開いています。これは、form2でボタンを押してSQLにデータを送信する(ステートメントに挿入する)場合、タイマーがコードを中断するため、データがSQLserverに保存されない可能性があります。

4

1 に答える 1

1

いいえ。WinFormフレームワークは単一のスレッドで動作します。したがって、Form2が現在データベースコマンドを実行している場合、そのコマンドが完了するまでUIスレッドはビジーになります。スレッドが自由に処理できるようになるまで、他のUIアクティビティは処理されません。System.Timers.Timerまたはを使用することもできますが、System.Threading.Timerこれらは別のスレッドで動作するため、タイマーの目的がステータスや進行状況の表示など、何らかの方法でUIを変更することである場合、UIへの変更はとにかく、UIスレッドは無料です。このような状況を処理する最良の方法は、代わりに、時間のかかる作業を別のスレッドで実行して、作業の実行中にUIスレッドが解放されるようにすることです。フォームでそれを行う最も簡単な方法は、BackgroundWorker成分。これはコンポーネントなので、フォームデザイナツールボックスからフォームにドラッグできます。

于 2012-10-04T15:46:43.253 に答える