按下按钮后并行或同时计算函数

问题描述 投票:0回答:2

在我的代码中,按下按钮后调用方法,调用三个函数进行计算并导出到 PDF 文件。其中一个函数将类的字段作为参数,通过在应用程序中移动滑块来更改该参数。问题是按下按钮的动画由于计算和导出而滞后。此外,exe 的 CPU 使用率上升了 7% - 15%。

该方法不返回任何内容,其工作结果只是 PDF 文件,所以我不需要等到它完成,只需启动它并关心其他事件。

我想让这个方法并行或同时计算,所以它不会减慢整个应用程序的速度,并且按下按钮的动画播放流畅。

尝试

我曾尝试将函数类型更改为 Future 并添加异步,但没有帮助。

我也试过用

Isolate.run
。如果我只在其中放置两个函数,它就可以工作,但是如果我添加第三个将类的字段作为参数的函数,它将停止工作。

这里是类的简化外观和按下按钮后调用的方法。

class Pattern{
    int scale = 10; //it's changed by slider

    void exportImage() {
        
        ImageBMP image = drawPattern(scale); //if I add this to Isolate it breakes
        
        var dividedImage = divideImage(image);
        
        createPDF(dividedImage);
    }
}

flutter asynchronous parallel-processing
2个回答
0
投票

导入具有计算方法的foundation.dart:

import 'package:flutter/foundation.dart';

然后在您的 exportImage 方法中使用计算在后台完成它的工作。

void exportImage() {
  compute((_) {
    ImageBMP image = createImage();
    var dividedImage = divideImage(image);
    createPDF(dividedImage);
  }, null);
}

0
投票

最终通过使用

Isolate.run
并在方法中为
scale
创建局部变量解决了这个问题。 最终代码看起来像这样

import 'dart:isolate';

class Pattern{
    int scale = 10; //it's changed by slider

    void exportImage() {
    
        int l_scale = scale;
        
        Isolate.run
        (()
            {
              ImageBMP image = createImage(l_scale); 
              var dividedImage = divideImage(image);
              createPDF(dividedImage);
            }
        );
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.