C# 在c中触发事件#

C# 在c中触发事件#,c#,events,slider,C#,Events,Slider,我要做的是为滑块触发ValueChanged事件。我该怎么做 我不想直接调用ValueChanged事件处理程序 实际上,我正在尝试触发事件,就好像用户正在调整UI上的滑块一样。您所描述的实际上无法完成。只能从声明事件的类内激发事件 无论如何,为什么需要触发ValueChanged事件?听起来这个任务是针对DataModel或ViewModel的,而不是滑块。引发其他对象的事件在测试中非常有用。以下代码可以实现这一点: class SomeClass { public event Actio

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

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


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

您所描述的实际上无法完成。只能从声明事件的类内激发事件


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

引发其他对象的事件在测试中非常有用。以下代码可以实现这一点:

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[] { });

那么,为什么不更改该值呢?您这样做是为了测试吗?您是否试图模拟引发的事件?如果是这样,反思会有所帮助。我可以给出一个这样的答案。请阅读下面。。。。当其他人问我同样好的问题时,我会深入细节。我想发起一个事件的原因是为了让mediaelement正确运行。启动事件使其工作。。。。设置一个值并不正确。这应该是一个注释,而不是建议的答案。它没有提出一个可能的解决方案或解决办法。请编辑以提出某种形式的有用信息或方法,或删除并作为对问题的评论发布。在我看来,告诉发问者不能这样做是有效的,尤其是因为它是正确的。当你通过编程更改滑块的值时,似乎会触发一组与用户实际抓住滑块并滑动时不同的事件。我想模拟的正是这些缺失的事件,原因是我用这个滑块调整mediaelement的速度比。mediaelement中有一个bug。当mediaelements位置更改时,尽管速度比设置为2.0,但仍以1.0的速度播放。我注意到,当我在播放过程中移动滑块时,无论触发什么事件,mediaelement都会再次关注速度比值。我只是想做一个简单的变通办法。@spender-mocking可以完成他想做的事情。如果我有时间,我会把答案打出来。“做不到”的答案是错误的,没有效率的,而且毫无帮助。你可以阻止我。。。。想出更好的解决办法我不确定上面的方法是如何工作的。我得看一看。@spender我会指出这是最好的测试目的。@Payo:读过你的困境(可能最好是作为问题的编辑添加),这里似乎适用“黑暗角落”。顺便说一句,谢谢你的帮助。我不想为我写的课程触发事件。我正在寻找一个滑块触发它。这对滑块有效吗?@user1435769是的,它对任何东西都有效。这就是反射的美:)