Я написал метод для реализации TPL ActionBlock
, который будет выполнять функцию поиска XPath элемента, который я отправляю в блок. Я отправляю элемент из приложения в реальном времени (всякий раз, когда пользователь находит элемент Опубликовать его в блок). Теперь я хочу проверить, завершен блок или нет, когда я вызываю кнопку сохранения из другого класса. Лог c - это если ActionBlok
завершено, когда мы нажимаем элемент кнопки «Сохранить», то сохранится с некоторыми логами сохранения c, в противном случае отобразится окно сообщения, еще не готовое. Впервые эта идея работает, но со второго элемента Actionblock
не принимает ничего. Я использую block.Complete()
и block.Completion.Wait()
для проверки сохранения. Теперь я могу показать, что звоню по коду / логи c.
- После создания элемента опубликуйте его
ActionBlock
Class1
......
jobQ.Enqueue(familarizedElement);
......
Внутри
ActionBlock
Class2 public class TPLCommonDataFlow
{
private ActionBlock<Element> _jobs;
public static bool TPLFlowStatus = false;
public static string JobStatus = string.Empty;
public TPLCommonDataFlow()
{
var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions()
{
MaxDegreeOfParallelism = 2,
};
_jobs = new ActionBlock<Element>((job) =>
{
Thread.Sleep(5);
File.WriteAllText("C:\\Temp\\A.txt", "Started" + _jobs.InputCount.ToString());
JobStatus = "started";
Familiarization.FindAndUpdateXPath(job);
File.WriteAllText("C:\\Temp\\A.txt", "Finished");
}, executionDataflowBlockOptions);
_jobs.Complete();
//Wait for all messages to propagate through the network
_jobs.Completion.Wait();
//Checking all jobs are completed or not, if completed changing the boo, value.
if (_jobs.InputCount == 0)
{
TPLFlowStatus = true;
JobStatus = "stoped";
}
}
}
Для сохранения я проверяю логическое значение TPLFlowStatus
Class3 if (class2.TPLFlowStatus == true)
{
//Save Logic
}
else
{
//Message Box showing Not Ready
}
Теперь я хочу проверять каждый раз, когда задание выполнено или нет каждый элемент в логе сохранения c. Если блок, имеющий два элемента в Queue
и один из них завершен, то MessageBox
должен появиться после нажатия кнопки сохранения. Если все выполнено в блоке, то нужно go сохранить логи c.