停止するにはフラグを基にしたスレッドFinesedequeue以下のスレッドメソッドでは、停止ボタンでループを実行しました(目的は_textFromFilesQueueという名前のキューを埋めた後にこのスレッドを停止することです)これで主な問題は、私のフォームが凍結されていることである。ここ キューをいっぱいにした後にスレッドを停止する
は私のコードです:スレッドメソッド:
public static bool Finisedqueue ;
public void Read(string inputDirectoryPath)
{
try
{
Thread.CurrentThread.IsBackground = true;
Finisedqueue = false;
Console.WriteLine("thread 1 started");
if (Form1.IsStarted)
{
Thread.Sleep(3000);
var dir = new DirectoryInfo(inputDirectoryPath);
FileInfo[] f = dir.GetFiles("*.txt");
if (f.Length > 0)
{
Console.WriteLine("{0} directory contains {1} Files",inputDirectoryPath,f.Length);
int counter = 0;
foreach (System.IO.FileInfo fi in f)
{
counter++;
var filePath = Path.Combine(fi.DirectoryName, fi.Name);
string textFromFile = File.ReadAllText(filePath);
_textFromFilesQueue.Enqueue(textFromFile);
Console.WriteLine("The text inside file number {0} is : {1}",counter,textFromFile);
fi.Delete();
Console.WriteLine("deleting file number {0} from input folder",counter);
}
Finisedqueue = true;
Console.WriteLine("finished Deleting files");
}
else
{
Console.WriteLine("{0} Has no files inside it ",inputDirectoryPath);
}
}
}
catch (Exception excep)
{
Console.WriteLine("An error occurred: '{0}'", excep);
throw(excep);
}
}
停止ボタンをクリックして:
あなたが他のスレッドに実行する機会を与えるように、それを待って、眠ることは良いアイデアである場合には忙しい10 private void stop_Click(object sender, EventArgs e)
{
while (!Thread1.Finisedqueue)
{
Console.WriteLine("Queue from First Thread is still Enqueuing data");
}
Thread1Timer.Dispose();
button3.Enabled = true;
textBox3.Enabled = true;
}
> the main problem in this is that my form is freezing
すべてのボディは、この中で私を助けることができるかどうかは非常に多くの
あなたのフォームはwhileループでフリーズします。 –
どうすればこの問題を解決できますか? –
あなたのStopClickは何も停止しておらず、すべての作業が完了するまでハングアップします。 –