私は、テキストファイルから読み込んだデータをディレクトリからデータベースにインポートするアプリケーションを持っています。ユーザーがインポートボタンをクリックしてデータのインポートを開始できるUIがあり、ユーザーがそのボタンを再度クリックすると、そのファイルのデータのインポートを停止したいと考えました。私はこれを可能にするためにスレッドを使い始めたので、データがインポートされている間はUIをフリーズしませんでした。しかし、私はいくつかの問題があります。ユーザーがインポートを停止した後にthread.Abort()を使用してスレッドを終了しましたが、ユーザーが再度インポートをクリックすると、必要なテキストファイルの先頭に読み込みを開始するため、重複したデータがデータベースに追加されます。 ManualResetEventsとThread.Join()を使用してインポートをトリガーするように指示されていますが、どのように動作するのか混乱しています。基本的にやろうとしているイムのために眠るそれ以外のデータをインポートするが、その後がある場合、ループして読み取られるすべてのファイルがあるかどうかをチェックトレッドを保つために何であるかC#手動リセットイベントによるスレッディング
public ManualResetEvent event1 = new ManualResetEvent(false);
public Thread workerThread;
public Form1
{
InitializeComponent();
}
private void importButton_Click(object sender, EventArgs e)
{
if(importButton.Text == "Begin Import")
{
importButton.Text = "Stop Import";
//runs a service that begins reading and importing data and writing to
//a "console" box.
Service service = new Service(consoleBox);
//run the new thread to begin importing data
workerThread = new Thread(service.importData);
workerThread.Start();
}
else
{
importButton.Text = "Begin Import";
event1.Set();
while(!event1.WaitOne(TimeSpan.FromSeconds(4)))
{ //imports data for 30 more text files
service.importData(30);
workerThread.Join();
}
}
}
:今私のコードは次のようになります4秒。私はこのためにスレッドタイマーを使用する必要がありますか?私は何をするのか分からない。