Winforms 到 WPF 的转换:BeginInvoke 到什么?

2024-02-13

这是我在 WinForms 中的旧代码:

    private void ValueChanged(double inValue1, double inValue2) {
        //only manual mode for this driver, so that's easy.
        if (ValueLabel.InvokeRequired) {
            ValueLabel.Invoke(new MethodInvoker(delegate {
                ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
            }
                ));
        }
        else {
            ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
        }
    }

有没有一种简单的方法可以将其转换为 WPF 友好的?到目前为止,我有:

   private void KVPValueChanged(double inValue1, double inValue2) {
        if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread){
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        } else {
            ValueLabel.Dispatcher.BeginInvoke(delegate {
                ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
            });
        }
    }

但第二个“委托”调用失败了。我怎样才能调用这个委托?我想我可以完成创建委托方法、创建委托方法的实例、调用该特定实例等的整个过程,但我认为这些匿名委托的全部目的是避免这种麻烦。另外,我的旧 winforms 代码到处都有第一个实现,所以我真的很想避免必须对所有代表进行去匿名化。

Edit:我可以尝试像以前一样使用 MethodInvoker,但编译器会感到困惑。 MethodInvoker 是 System.Windows.Forms 的一部分,因此使用该方法不起作用。如:

    private void ValueChanged(double inValue1, double inValue2) {
        if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread) {
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        }
        else {
            ValueLabel.Dispatcher.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate {
                ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
            }));
        }
    }

MethodInvoker 的使用是不合规矩的。是否有单独的实现,或者使用相同行为的其他方式?


System.Windows.Forms.MethodInvoker 只是一个不带参数并返回 void 的委托。在 WPF 中,您只需将其替换为系统.动作 http://msdn.microsoft.com/en-us/library/system.action.aspx。还有其他内置代表接受参数 http://msdn.microsoft.com/en-us/library/018hxwa8.aspx, 返回值 http://msdn.microsoft.com/en-us/library/bb534960.aspx, or both http://msdn.microsoft.com/en-us/library/bb549151.aspx.

就你而言,

ValueLabel.Dispatcher.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate {
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        }));

becomes

ValueLabel.Dispatcher.BeginInvoke(new Action(delegate() {
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        }));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winforms 到 WPF 的转换:BeginInvoke 到什么? 的相关文章

  • Windows 窗体 PictureBox.Image 为空,即使窗体中显示图像

    我正在尝试捕获此设备扫描的指纹 gt http www nitgen com eng product finkey html http www nitgen com eng product finkey html 我能够成功扫描指纹并保存二
  • 如何防止新的 WPF 表单窃取焦点?

    我写了一个简单的MSN http en wikipedia org wiki MSN 风格的程序将使用发送和检索消息WCF http en wikipedia org wiki Windows Communication Foundatio
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 将 SQL 数据库附加到 ComboBox.ItemSsource (WPF)

    我想知道如何将 SQL Server 数据库分配给 ComboBox 的 ItemSource 属性 在 WPF 应用程序中 我将数据源分配给项目 但不知道如何分配给属性 此致 你可以这样尝试 你可以像下面这样绑定组合框的项目源属性 Ite
  • 如何更改表单中所有面板的背景颜色

    我的工具需要帮助 我已经尝试改变Color my Panel with ColorDialog但它不起作用我想全部改变颜色Panel in my Form 面板构造函数 Panel p new Panel 事件处理程序 private vo
  • Winforms 中的可视化树形图

    是否有用于在 C 2 0 WinForms 中构建方形树形图的框架 与此类似的东西 from http www codeproject com KB recipes treemaps aspx http www codeproject co
  • 绑定到 ObservableCollection 的 ContextMenu 不刷新数据

    给出以下 XAML 片段
  • 我可以在 WinForms 中的 PictureBox 上创建透明背景吗?

    我想做一个背景PictureBox控制透明 在里面PictureBox 矩形 我放置了一个图标 圆形 我想让图标透明 以便图标下方的其他部分可见 我尝试过设置PictureBox BackColor属性设置为 透明 但不起作用 我还尝试在运
  • Windows 窗体和 XNA - 绘制不是实时的

    我目前正在为 XNA 开发一个关卡编辑器 它是通过结合 Windows 窗体和 XNA 构建的 我正在使用 App Hub 上示例中的内容链接文本 http create msdn com en US education catalog s
  • 在两个屏幕上拉伸 WPF 窗口

    我是 WPF 的初学者 我希望我的应用程序能够跨越两个具有相同分辨率的屏幕 我需要一个示例代码应用程序 因为我不知道从哪里开始 谢谢 The Screen课程将为您提供有关所有屏幕的信息 在之前没有实际做过的情况下 我会尝试以下操作 int
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 双击定时器事件

    我正在开发一个应用程序 将用户的眼球运动与光标运动映射起来 从而开发一个免提光标控制系统 我正在使用 Open CV 库的 NET Wrapper for C 即 Emgu CV 进行开发 我被困在想要打开文件 文件夹的地方 这样当光标放在
  • 工具提示出现在表单/窗口后面! (C#/VS 2008)

    由于某些奇怪的原因 我在 VS 2008 C winforms 应用程序中的工具提示显示在表单后面 这非常令人沮丧 我不知道我应该做什么 有人遇到过这个吗 有想法吗 PS 我正在表单中以编程方式执行 toolstip show 您可能需要检
  • 在 WinForm DataRepeater C# Power Pack 中处理按钮单击

    我想处理DataRepeater中winform按钮的点击 我该怎么做 所有按钮都放置在 DataRepeater 中 非常感谢 在 Visual Studio Designer 中 双击该按钮 然后您将获得空的事件处理程序方法 在那里添加
  • WPF - 使用 DataTemplates 将数据绑定到 StackPanel

    我修改了我的问题 因为它在尝试时改变了焦点 我将问题缩小到以下范围 我尝试将 TreeView 的选定项绑定到 StackPanel 或可以容纳用户控件的其他容器 然后 该容器将显示一个 UserControl 具体取决于所选项目的类型 这
  • 在 WinForms 中从 Treeview 拖放到文本框的增强功能

    我有以下代码 可以成功将树视图节点拖放到 WFA 中的文本框 private void MyTreeView ItemDrag object sender ItemDragEventArgs e DoDragDrop e Item ToSt
  • 在 WPF 中的不同控件上显示验证错误模板

    我有一个UserControl包含其他控件和TextBox 它有一个Value绑定到的属性TextBox文本并有ValidatesOnDataErrors设置为 True 当验证错误发生时Value属性绑定 错误模板 标准红色边框 显示在整
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单

随机推荐

  • SQL Server 表有 100k 条记录,2 个内连接速度极慢

    我正在将数据从 SQL Server 迁移到 Postgres 我正在更改我的表结构以处理一般的体育比赛 但这给我带来了性能问题 我有以下表格 matches id 开始时间 比赛队伍 id match id team id 分数 比赛选手
  • .htm 或 .html 扩展名 - 哪一个是正确的,有什么不同?

    当我保存扩展名为 htm 或 html 的文件时 哪个是正确的 有什么不同 两者都没有错 只是偏好问题 传统上 MS 软件使用htm默认情况下 nix 更喜欢html 正如下面所指出的 htm 传统是从 win 3 xx 延续下来的 其中文
  • z-index css弹出框和ie7

    我有一些 div 框 当悬停时应该显示一个语音框 有了 jQuery 和 CSS 一切都不是太难 然而 弹出语音出现在 IE7 中的相邻 div 下 我无法使其出现在其下方 参见截图 我尝试在不同的地方使用 z index 但没有成功 FF
  • 在使用库方面,C/C++/Objective-C 与 C# 相比如何?

    这个问题是基于之前的一个问题 C 编译如何避免需要头文件 https stackoverflow com questions 1917935 how does c compilation get around needing header
  • SSIS 2012 和 SAP HANA

    有谁知道是否可以使用 SSIS 2012 将数据导入 或导出 SAP HANA 我在网上查了一下 似乎找不到太多关于两人合作的信息 我知道 SAP Data Services 是 HANA 推荐的 ETL 工具 但如果可能的话 我们希望尝试
  • 设置 jupyter 笔记本主题后工具栏不可见

    当我从笔记本调用并加载主题时 工具栏和笔记本名称不显示 我可以使用代码从笔记本加载主题 但我不确定如何使用类似的开关 T and N用于调用工具栏和笔记本名称 我在代码单元中使用了以下内容 from jupyterthemes import
  • 从内部作用域访问外部作用域

    我有一个看起来有点像这样的类型 var x function this y function this z function this A function CALLING POINT 从调用点 我尝试调用函数 this y 我不需要传递任
  • Node JS 读取缓冲数据

    由于某种原因 当我向端口发送消息并尝试通过缓冲区读取它时 它总是挂起socket on end 似乎永远无法达到 有任何想法吗 var net require net var buffer var server net createServ
  • Android监听应用程序中的所有事件

    我想监听手机上的所有用户事件 例如onTouch onClick onMenuItemClickedETC 为此 我创建了一个扩展活动的超级类 所有活动都从该类扩展 public class TopActivity extends Acti
  • 如何删除 MongoDB 中的 _id 并替换为另一个字段作为主键?

    我收藏了大量文件 我想从所有文档中删除自动生成的对象 ID id 键 并将其替换为另一个字段作为主键 我不明白为什么首先需要一个默认的对象 ID 在 mongodb 中 每个文档必须是唯一的 因此您需要一个唯一的字段来用作 id 如果您不提
  • 在原型中,如何将地图定义为自定义选项

    在我的原型文件中 我想将地图定义为自定义选项 尝试了一些方法 但没有一个起作用 我的元数据原型文件 syntax proto2 import google protobuf descriptor proto package com util
  • Android 中的滚动与 WebView 完美配合

    我有一个布局 我正在通过 WebView 在其中渲染 HTML 文档 XML 布局是
  • 如何重命名 ASP.NET 5 Web 项目中用作 Web 根目录的“wwwroot”文件夹

    我想将 ASP NET 5 项目中的 Web 根文件夹重命名为wwwroot 当我手动重命名该文件夹时 项目不再将其识别为 Web 根文件夹 项目属性页面不允许修改 Web 根目录 有没有办法重命名和 或重新分配 ASP NET 5 Web
  • 在 CSS 网格中从底部开始填充单元格

    我有一个 3 行的 CSS 网格 可能要填的项目还不到3个 我想从底部开始填 我创建了一个jsFiddle https jsfiddle net Lexogram vd7g4x5e 8 供你玩 但目前它无法达到我想要的效果 html bod
  • 在选项卡式窗口中显示输出

    我用 Java 为 Linux 开发了一个任务管理器 目前的输出显示在控制台中 而选项卡式窗口单独出现 这是使用 Java Swing 完成的 现在我希望控制台的输出显示在选项卡式窗口中 我该怎么做 有一些我用过的课程 一个用于任务管理器功
  • UITableView 滚动时单元格数据显示不正确

    我面临一些奇怪的问题 每当我滚动表格视图时 我的数据就会被其他单元格替换 每次 它都会被不同的单元格数据替换 我在这个替换中没有看到任何特定的模式 cell UITableViewCell alloc initWithStyle UITab
  • 如何将此node.js模块降级到特定版本并防止以后自动升级?

    我正在使用node js Nodemailer模块并遇到以下错误 错误 不支持的配置 将 Nodemailer 降级到 v0 7 1 或 请参阅迁移指南https github com andris9 Nodemailer migratio
  • HTML 详细信息/摘要元素标记样式

    我有一些 CSS 可以对详细信息元素中的摘要元素旁边的标记进行样式设置 CSS 本身工作得很好 但是 如果我在第一个详细信息元素中嵌套另一个详细信息元素 创建父详细信息元素和子详细信息元素 我的标记内容将无法正确切换 一旦我打开父元素 子标
  • Postcss - 颜色函数插件 - “无法从字符串解析颜色”

    使用以下 postcss 插件 postcss cssnext postcss 嵌套 postcss 颜色函数 使用以下颜色函数时 我经常遇到以下错误 Unable to parse color from string l 20 样式 cs
  • Winforms 到 WPF 的转换:BeginInvoke 到什么?

    这是我在 WinForms 中的旧代码 private void ValueChanged double inValue1 double inValue2 only manual mode for this driver so that s