【问题标题】:Fire an event in c#在 C# 中触发一个事件
【发布时间】:2012-07-26 18:45:19
【问题描述】:

我想做的是为滑块触发 ValueChanged 事件。我该怎么做?

我不想直接调用 ValueChanged 事件处理程序。

我实际上是在尝试触发事件,就好像用户正在调整 UI 上的滑块一样。

【问题讨论】:

  • 那你为什么不直接改变值呢?
  • 您这样做是为了测试 - 您是在尝试模拟引发的事件吗?如果是这样,反思会有所帮助。我可以给出答案。
  • 请阅读下文......当其他人问同样的好问题时,我会详细说明。
  • 我想要触发事件的原因是为了让媒体元素正常运行。触发事件使其工作....设置值不会。

标签: c# events slider


【解决方案1】:

引发其他对象的事件对测试很有帮助。下面的代码可以实现:

class SomeClass
{
  public event Action SomeEvent;
}

// later
var instance = new SomeClass();
instance.SomeEvent += () => Console.WriteLine("it happeneed");

var flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
var type = typeof(SomeClass);
var field = type.GetField("SomeEvent", flags);
var method = field.FieldType.GetProperty("Method", flags);
var target = field.FieldType.GetProperty("Target", flags);
var methodInstance = field.GetValue(instance);
((MulticastDelegate)methodInstance).DynamicInvoke(new object[] { });

【讨论】:

  • 你可以阻止我....想出一个更好的解决方案。 ;) 我不确定上述内容将如何工作。将不得不看一下。
  • @spender 我会指出这是最好的测试目的。
  • @Payo:阅读了您的困境(可能最好将其添加为对您问题的编辑),似乎“暗角”适用于此。
  • 感谢您的帮助。我不想为我写的课程触发事件。我正在寻找为滑块触发它。这对 Slider 有用吗?
  • @user1435769 是的,它适用于任何事情。这就是反射的美 :)
【解决方案2】:

你所描述的真的做不到。事件只能在声明它们的类中触发。

为什么还需要触发 ValueChanged 事件?听起来这个任务是针对 DataModel 或 ViewModel 而不是滑块的。

【讨论】:

  • 这应该是评论,而不是建议的答案。它没有提出可能的解决方案或解决方法。请编辑以提出某种形式的有用信息或方法,或删除并作为对该问题的评论发布。
  • @VulgarBinary。 IMO,告诉提问者它不能完成是有效的,尤其是它是正确的。
  • 当您以编程方式更改滑块的值时,似乎会触发一组不同的事件,而不是用户实际抓住并滑动它时触发的事件。我想模仿的正是这些缺失的事件。
  • 原因是我有这个滑块可以调整媒体元素的速度比。媒体元素中有一个错误。当 mediaelements 的位置发生变化时,尽管设置为 2.0,但速度比仍以 1.0 的速度播放。我注意到,当我在播放期间移动滑块时,无论触发什么事件似乎都会让媒体元素再次关注速度比值。我只是想在这里做一个简单的解决方法。
  • @spender - 模拟可以完成他想要做的事情。如果我有时间,我会输入答案。 “无法完成”的答案是错误的、没有成效的,而且没有任何帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
相关资源
最近更新 更多