Вот допустим, есть большой бинарный файл. И есть кусочек, допустим, из 100 байт.
Нужно пройтись по большому файлу и, допустим, найти совпадение. Но не всегда нужно, чтобы совпадали именно 100 байт. Иногда бывает нужно пропустить сравнение некоторых байт. То есть, паттерн поиска может быть разный. Кажется, это ведь паттерн называется
То есть, проще говоря, надо делать одно и то же, но по разному. Кажется, именно для этого существуют интерфейсы.
Должен быть интерфейс с методом Search(...) и разные реализации этого интерфейса. Что-то типа этого:
namespace ConsoleApp3
{
internal class Searcher1 : ISearcher
{
public void Search()
{
for (int i = 0; i < 99999999; ++i)
{
if (i % 10000 == 0)
{
}
}
}
}
}
Но как в интерфейсе запустить поток и как синхронизироваться с формой?
То есть, в конструктор реализатора интерфейса передавать контекст потока формы и блаблабла всё как обычно?
Ну отличается же только сам поиск, так что можно сделать одну функцию, которая делает все общие вещи (управление потоком, …) и вызывает переданный интерфейс. Иначе зачем он вообще.
searcher либо возвращает результат возвращаемым значением функции, либо принимает колбэк, в который результат передает. И та функция, которая searcher вызывала, выводит результат любым нужным способом.
Кажется, понял Но у меня поиск должен найти не одно совпадение, а довольно много. И сам побайтовый перебор идёт крайне медленно (даже на маленьких файлах). А ведь есть и большие
Так что, всё-равно придётся синхронизироваться во время поиска, а не просто выдавать результат в конце
А как правильно колбэк объявить, чтобы его в метод поиска передать? Я вчера делал и оно работало, но какая-то фигня получилась. Потом переписал вот так: