Использовать потоки для ячеек в пользовательской сетке - PullRequest
0 голосов
/ 25 октября 2019

У меня есть приложение WPF с пользовательским элементом управления, таким как сетка (предположим, что у него 100 строк и 10 столбцов), и у него есть формулы в большем количестве ячеек. У меня есть своя логика для разбора и вычисления формул из этих ячеек по очереди. Работает нормально, но занимает больше времени. Поэтому я решил использовать многопоточность для одновременного анализа ячеек.

У меня нет опыта в многопоточности. Я пытался Класс потока и ThreadPool для этого, но я не знаю, как это реализовать.

Здесь я представил обзор моего кода,

  1. UpdateCell -> Точка входа каждой ячейки
  2. Здесь invoke -> string parsedString = Parse ("cellText");

Пожалуйста, укажите мне, гдея могу использовать MultiThreading в методе UpdateCell или Parse и помочь мне, как использовать Threads или ThreadPool здесь.

    Public void UpdateCell(object cell)
    {
       string ParsedString = Parse(grid, cellText);
//How to use threads here? I tried ThreadPool here, but grid gets disposed after thread execution. so that it leads crashing.
    //some codes
    }

    public string Parse(string formulaText)
    {
    //Parsing logic    (How to use threads here? Here i tried threads but it returns empty string immediately.)
    return formulaText; 
    }

Спасибо,

1 Ответ

0 голосов
/ 25 октября 2019

Лучше использовать задачи над потоками. Попробуйте этот код

public async Task<bool> UpdateCellAsync(object cell)
{
     string parsedString = await ParseAsync("cellText");         
     //if no errors - return true, else - false
     return true;
}

public async Task<string> ParseAsync(string formulaText)
{
     // if you have async methods, then await methodAsync();
     // or create or task/tasks
     await Task.Run(() => //your code in separate thread. );
     //other stuff to do
     return formulaText
}
...