Nano Hash - криптовалюты, майнинг, программирование

VC++ Winforms передает функцию-член в качестве аргумента для BackgroundWorker

Будучи новичком, я борюсь с синтаксисом здесь. Я делаю общий BackgroundWorker, чтобы не создавать отдельных рабочих для каждой из многих задач в моем приложении. Я не могу понять, как передать функцию-член в RunWorkerAsync()

Вот код моего метода DoWork:

private: System::Void backgroundWorker2_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    Func<int> ^func = (Func<int>^)e->Argument;
    e->Result = func();
}

Допустим, я хочу, чтобы рабочий BG запускал функцию с именем myfunc. Я хочу сделать что-то вроде этого: RunWorkerAsync(myfunc)

Хотя myfunc является членом того же класса, то есть Form1


  • Если это был С#, вы можете расширить обработчик событий 17.03.2015

Ответы:


1

Мне не ясно, в чем может быть зависание, синтаксис для создания Func‹> не сильно отличается от того, как вы подписываетесь на событие DoWork. Итак, просто пример кода:

ref class Example {
    BackgroundWorker^ worker;
    void OnDoWork(System::Object ^sender, System::ComponentModel::DoWorkEventArgs ^e) {
        auto job = safe_cast<Func<int>^>(e->Argument);
        e->Result = job();
    }
    int myfunc() {
        return 42;
    }
public:
    Example() : worker(gcnew BackgroundWorker) {
        worker->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(this, &Example::OnDoWork);
        auto job = gcnew Func<int>(this, &Example::myfunc);
        worker->RunWorkerAsync(job);
    }
};
16.03.2015
  • Но также есть ли способ обобщить тип функции? Я имею в виду, что, если я хочу вызвать функцию, которая возвращает String^ вместо int? 17.03.2015
  • Затем вместо этого вы используете Func<String^>^. 17.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..