首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TStringList传递给TOmniTask过程

将TStringList传递给TOmniTask过程
EN

Stack Overflow用户
提问于 2014-09-19 13:05:35
回答 1查看 235关注 0票数 2

我正在使用Delphi2007应用程序中的OmniThreadLibrary,它使用全局线程池预先形成一些文件操作(我需要尝试并确保它们是按照特定的顺序完成的)。

我有一个新创建的Ini文件的内容,该文件存储在一个TStringList中。

然后我将TStringList传递给TOmniTask的一个实例。

代码语言:javascript
复制
class procedure saveIniFile(const iniFile: TStringList);
    var
        task  : IOmniTaskControl;
    begin
        task := CreateTask(saveIniFileTask, 'saveIniFile')
                   .SetParameter('iniFile', iniFile)
                   .Unobserved
                   .Schedule;
    end;

我不知道如何在TStringList实例中检索TOmniTask

代码语言:javascript
复制
class procedure saveIniFileTask(const task: IOmniTask);
    var
        iniFile: TStringList;
    begin
        iniFile := task.Param['iniFile'];
    end;

以上内容将返回一个错误:

代码语言:javascript
复制
Incompatible types: 'TStringList' and 'TOmniValue'

我试过打字:

代码语言:javascript
复制
iniFile:= TStringList(task.Param['iniFile'].AsObject);

但是得到一个编译器错误:

代码语言:javascript
复制
F2084 Internal Error: C4310

我使用的是OmniThreadLibrary版本3.0 -我无法在D2007中编译3.03b

如果@gabr是关于:伟大的作品OmniThreadLibray,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 13:14:40

F2084内部错误: C4310

这是一个内部编译器错误。那是编译器的错误。您的代码很好,但是编译器由于某些原因而出现故障。

找个解决办法。我希望编译器会因为将数组属性读取、普通属性读取和在单个表达式中进行强制转换而抓狂。代码没有什么问题,但编译器有时很容易混淆。

显然,要尝试的是向编译器提供更简单的表达式。例如,尝试存储到局部变量,然后进行强制转换:

代码语言:javascript
复制
var
  obj: TObject;
....
obj := task.Param['iniFile'].AsObject;
iniFile := TStringList(obj);

或者,如果它不喜欢这一点,那就往前走一步:

代码语言:javascript
复制
var
  ov: TOmniValue;
  obj: TObject;
....
ov := task.Param['iniFile'];
obj := ov.AsObject;
iniFile := TStringList(obj);

或者你可以逃脱:

代码语言:javascript
复制
var
  ov: TOmniValue;
....
ov := task.Param['iniFile'];
iniFile := TStringList(ov.AsObject);

你应该能得到这样的东西来工作。

FWIW,我建议在这里做一次检查:

代码语言:javascript
复制
iniFile := ov.AsObject as TStringList;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25934630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档