如何在 C# 3.5 中取消异步委托?

2024-01-17

我上下搜索了谷歌,但几乎找不到有关该主题的任何正确信息。

我想做的是这样的:

  1. 用户在文本框中键入单个搜索字符串。
  2. 我等待 0.5 秒,然后开始 BeginInvoke 指向搜索方法的委托。
  3. 如果用户再次键入一个字符,我想取消搜索并使用键入的新字符串开始新搜索。
  4. UI线程一定不能被阻塞!

我怎样才能使用 C# 3.5 做到这一点?

UPDATE:

View:

private void OnTextChanged(...)
{
   if (SearchFormatEvent != null)
   {
       ICollection<object> collection = SearchFormatEvent("MySearchString");
       // Do stuff on the returned collection                            
    }
}

搜索提供者:

// This is the delegate invoked for the async search taking the searchstring typed by the user
    public delegate ICollection<object> SearchInputTextStrategy<T>(string param);

    public class SearchProvider : ISearchProvider
    {
        private ITextView _view;
        private SearchInputTextStrategy<object> searchInputDelegate;

        public SearchProvider(ITextView view)
        {
            _view = view;
            _view.SearchFormatEvent += new ConstructSearchFormatDelegate(CostructSearchFormat);
        } 

        private string SearchFormat(string param)
        { 
            // compute string

            return string.Empty; //...
        }

        public ICollection<object> CostructSearchFormat(string param)
        {
            var searchfilter = SearchFormat(param);

             IAsyncResult pendingOperation = searchInputDelegate.BeginInvoke("searchfilter",null,null);

            // How can I cancel the Async delegate ?

            ICollection<object> result = searchInputDelegate.EndInvoke(pendingOperation);

            return result;                
        }
    }

切换到 BackGroundWorker ,支持您所需的一切(NoUI 阻止、取消等、进度报告..)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 3.5 中取消异步委托? 的相关文章

随机推荐

  • WSDL测试

    有人做过 wsdl 测试吗 即 模式验证 语义验证 WSDL 回归测试 互操作性 有人知道如何实施上述内容吗 I use SoapUI http www soapui org 用于我所有的 SOAP REST 测试 它可以完成您想要的所有操
  • 在 AWS CodePipeline 中对多个构建进行手动审批

    我们设置了一个 CodePipeline 来执行构建 部署到 QA ECS 环境 然后执行手动批准步骤以部署到 Prod 但令人困惑的是 当有多个构建相继运行时 多个构建按顺序部署到 QA 但 批准 按钮似乎一次批准一个 并且当您单击它时不
  • 缺少“运行方式”Android 应用程序

    SDK 和 ADT 已安装并正常工作 但是当我运行一些 android 代码时 运行方式 面板为空 我需要转到运行配置 单击 Android 应用程序 制作副本 将我的项目名称放在副本上并运行它 然后在模拟器上就可以正常运行了 如何在运行方
  • Java 工作空间和文件路径

    我有一个可能很容易解决的问题 我的项目中有一个文件夹 想使用相对路径获取它 new File folder 这给了我FileNotFoundException 如果我尝试这样 new File d workspace project fol
  • tf-idf 向量化器在 char_wb 的特征词中有空格?

    I use singleTFIDF TfidfVectorizer analyzer char wb ngram range 4 6 stop words my stop words max features 50 fit text 并想知
  • 无法加载模块 XML::LibXML::Common 的“/usr/lib/perl5/vendor_perl/5.8/msys/auto/XML/LibXML/Common/Common.dll”:dlopen:Win32 错误 126

    我被这个错误困住了 Can t load usr lib perl5 vendor perl 5 8 msys auto XML LibXML Common Common dll for module XML LibXML Common d
  • 有权在 Django 管理中仅修改模型的一个字段的用户

    我有一个名为专家用户谁应该只能在 Django 管理中修改用户的调用模型 金钱 的属性 我尝试使用以下命令在模型中添加权限Meta但是当获得该许可进入时我无法修改任何内容 因为我无权访问任何用户 我的模型是这样的 class Client
  • 选择更改事件触发多次

    下拉列表的 更改 事件发生了非常奇怪的事情 基本上我有一个下拉菜单 在更改它时我必须进行一些跨域 Web 服务调用 这个调用是由 javascript 本身进行的 当我第一次更改 选择 列表中的项目时 更改事件仅触发一次 下次再做两次 就长
  • 对curl对象的未定义引用

    已编辑 我几周来一直试图让curl从网页调用信息 但我得到了一个看似常见的错误 即我的程序无法识别curl对象 C Users CurlAttempt CurlAttempt1 cpp 25 undefined reference to i
  • NotReadableError:无法启动源

    我在我的项目中添加了这段代码 if navigator mediaDevices undefined navigator mediaDevices if navigator mediaDevices getUserMedia undefin
  • 让 System.Web.Optimization 在类库中的剃刀视图中工作

    我正在构建一个模块化 MVC4 应用程序 其中每个模块 区域 都是一个类库 模型和控制器编译成 dll 视图被复制到适当的文件夹中 在运行时 一切正常 在设计时 还剩下一个恼人的问题 在类库中编辑剃刀视图时 Visual Studio 无法
  • 使用 UUID npm 模块出现奇怪的错误。我究竟做错了什么?

    Getting 错误 D test node modules uuid 的包导出未定义 子路径 一直当我require it 操作系统 Windows 10 专业版节点版本 v13 1 0NPM 版本 6 14 4 我从头开始创建了一个项目
  • C# datagridview 单元格具有自动完成功能,例如

    我正在尝试为我的商店创建一个桌面应用程序 我的应用程序当前使用自动完成项目 如截图所示 现在我想将该单元格更改为自动完成LIKE功能 例如 我的项目列表包含 book brush pen samsung note 1 samsung not
  • 使用 selenium webdriver 在自定义下拉列表中选择一个选项

    我正在尝试使用 selenium java 从 DropDown 中选择一个选项 我也尝试过很多解决方案 在 FirePath 中执行 XPath 时找到国家元素 但在运行脚本时找不到 硒代码 driver findElement By x
  • 将代码附加到现有函数的末尾

    每当函数 foo 触发时 我需要触发函数 bar 我无法控制函数 foo 或它将来是否会改变 我经常遇到这种情况 而且我讨厌它 我编写此函数是为了将代码添加到函数 foo 的末尾 function appendToFunction fn c
  • 在java中从数据库中检索值

    我正在制作一个程序 从我创建的数据库中检索输入的数据 字段值 但当我运行它时 输出始终为空 我想知道怎么了 这是我的代码 import java sql public class GuestsInfo private String firs
  • 如何删除 Windows 上的 dotnet 运行时?

    我找到了命令dotnet list runtimes它为我输出 缩写 Microsoft AspNetCore All 2 1 15 C Program Files dotnet shared Microsoft AspNetCore Al
  • 如何挂钩 MySQL 查询为 true 时触发的事件?

    如何创建一个 PHP 脚本来一致地检查 MySQL 行 如果一组查询匹配 它就会启动一个事件 例如发送电子邮件 例如 在查询匹配时Fire开始电子邮件 To email protected cdn cgi l email protectio
  • 带有数组或 JSON 数据的 D3 堆积图

    我想创建一个堆积条形图 例如http bl ocks org mbostock 3886208 http bl ocks org mbostock 3886208 但我不想使用 CSV 文件 如何使用数组或 JSON 数据创建堆积图 在 c
  • 如何在 C# 3.5 中取消异步委托?

    我上下搜索了谷歌 但几乎找不到有关该主题的任何正确信息 我想做的是这样的 用户在文本框中键入单个搜索字符串 我等待 0 5 秒 然后开始 BeginInvoke 指向搜索方法的委托 如果用户再次键入一个字符 我想取消搜索并使用键入的新字符串