私はスレッドが初めてで、助けが必要です。新しいレコードを挿入するのに非常に長い時間 (つまり、50 ~ 75 秒) かかるデータ入力アプリがあります。したがって、私の解決策は、ThreadPool を介して挿入ステートメントを送信し、挿入の実行中に新しいレコード ID を返す挿入中に、ユーザーがレコードのデータの入力を開始できるようにすることでした。私の問題は、その挿入から新しい ID が返される前に、ユーザーが保存を押すことができることです。
安全に保存できるときに、そのスレッドからのイベントを介してtrueに設定されるブール変数を入れてみました。それから入れました
while (safeToSave == false)
{
Thread.Sleep(200)
}
それは悪い考えだと思います。トレッドが戻る前に保存メソッドを実行すると、スタックします。
だから私の質問は:
- これを行うより良い方法はありますか?
- ここで何が間違っていますか?
助けてくれてありがとう。
ダグ
詳細については編集してください:
非常に大きな (最大サイズに近づいている) FoxPro データベースへの挿入を実行しています。このファイルには、約 200 のフィールドとほぼ同じ数のインデックスがあります。
そして、あなたが尋ねる前に、いいえ、私がいる前にここにあったように、それの構造を変更することはできず、それを打つ大量のレガシーコードがあります。最初の問題は、新しい ID を取得するには、最初にテーブル内の max(id) を見つけてから、それをインクリメントしてチェックサムする必要があることです。これには約 45 秒かかります。次に、最初の挿入は、その新しい id と enterdate フィールドの単純な挿入です。このテーブルは DBC に入れられない/入れられないので、自動生成 ID などを除外します。
@joshua.ewer
あなたは正しいプロセスを持っています。短期的には保存ボタンを無効にするだけだと思いますが、それをキューに渡すというあなたのアイデアを検討します。確認すべき MSMQ に関する参考資料はありますか?