首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TWAIN异步扫描文档

使用TWAIN异步扫描文档
EN

Stack Overflow用户
提问于 2017-07-07 05:10:31
回答 1查看 1K关注 0票数 0

我有一个使用TwainDotNet从富士通扫描仪扫描和接收图像的C#程序。我有工作代码,但我想异步执行扫描和图像传输,因为GUI会挂起,直到扫描过程完成。

我尝试使用以下代码遵循this post's accepted中的指导原则:

代码语言:javascript
复制
public void StartScanning()
{
    // Run the scanner from a separate thread
    Task.Run(() => ScanThread());
}

private void ScanThread()
{
    // Instantiate the Twain object and hookup event handlers
    Twain twain = new Twain(new WinFormsWindowMessageHook(new Form()));
    twain.TransferImage += Twain_TransferImage;
    twain.ScanningComplete += Twain_ScanningComplete;

    // Start the scanning process by passing along pre-defined scan settings
    twain.StartScanning(GetScanSettings());
}

ScanThread()内部的代码在技术上是正确的,因为它在对Task.Run()的调用之外工作(这意味着它在GUI线程上运行得很好)。但是,如果从新线程调用,ScanThread()将不起作用。扫描仪硬件从不开始扫描图像,更不用说传输它们了。

有没有人知道使用TWAIN异步扫描和传输图像的具体方法?

EN

回答 1

Stack Overflow用户

发布于 2017-07-07 05:32:00

我怀疑“简单”的答案是“你不能”。

更复杂的答案是"twain“(或者可能是"GetScanSettings”-这是做什么的?)可能需要在UI线程上执行操作。

请参阅:TwainDotNet Scanning using TWAIN with BackgroundWorker

但是,使用您已有的代码可能是可能的,除了如果引用较弱(例如事件委托),您创建的表单几乎立即就会超出范围。

尝试添加线程安全列表或字典,在创建该列表或字典时向其中添加窗体,然后在Twain_ScanningComplete中删除该列表或字典。

嗯。实际上,试一下

代码语言:javascript
复制
private ConcurrentDictionary<Twain,Form> m_References = new ConcurrentDictionary<Twain,Form>();


private void ScanThread()
{
    // Instantiate the Twain object and hookup event handlers
    Form frm = new Form();
    Twain twain = new Twain(new WinFormsWindowMessageHook(frm));
    m_References.Add(twain, frm);

    twain.TransferImage += Twain_TransferImage;
    twain.ScanningComplete += Twain_ScanningComplete;

    // Start the scanning process by passing along pre-defined scan settings
    twain.StartScanning(GetScanSettings());
}


private void Twain_ScanningComplete(object sender, ScanningCompleteEventArgs args)
{
    Form frm;
    m_References.TryRemove((Twain) sender, out frm);
    if(null != frm)
    {
       frm.Close();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44958906

复制
相关文章

相似问题

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