相关疑难解决方法(0)

在C#中取消订阅匿名方法

是否可以从事件中取消订阅匿名方法?

如果我订阅这样的事件:

void MyMethod()
{
    Console.WriteLine("I did it!");
}

MyEvent += MyMethod;
Run Code Online (Sandbox Code Playgroud)

我可以这样取消订阅:

MyEvent -= MyMethod;
Run Code Online (Sandbox Code Playgroud)

但是如果我使用匿名方法订阅:

MyEvent += delegate(){Console.WriteLine("I did it!");};
Run Code Online (Sandbox Code Playgroud)

是否有可能取消订阅这种匿名方法?如果是这样,怎么样?

c# delegates anonymous-methods

214
推荐指数
7
解决办法
7万
查看次数

如何取消注册"匿名"事件处理程序

说如果我听一个事件:

Subject.NewEvent += delegate(object sender, NewEventArgs e)
{
    //some code
}); 
Run Code Online (Sandbox Code Playgroud)

现在我如何取消注册此活动?或者只是让内存泄漏?

.net c# events delegates anonymous-methods

37
推荐指数
4
解决办法
2万
查看次数

lambda表达式和事件处理程序?

有人向我提到c#支持使用lambda表达式作为事件处理程序,有人可以与我分享一些参考吗?

代码段是首选.

.net c# c#-4.0

7
推荐指数
1
解决办法
2949
查看次数

如何从C#中的Action委托中删除方法

可能重复:
C#添加和删除匿名事件处理程序

假设我有一个以这种方式声明的Action委托:

public event Action<MenuTraverser.Actions> menuAction;
Run Code Online (Sandbox Code Playgroud)

我正在以这种方式关联一个方法:

menuInputController.menuAction += (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);
Run Code Online (Sandbox Code Playgroud)

现在,一切正常,但在某些情况下我需要删除委托方法,我不知道如何.我试过这种方式,但不起作用:

menuInputController.menuAction -= (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我需要我的方法OnMenuAction将不再被调用.

c# delegates action

2
推荐指数
1
解决办法
7822
查看次数

取消订阅匿名委托事件

我在找出一种取消订阅的方法时遇到了一些麻烦,这种方法取消了我在预先制作的帮助文件中发现的一些匿名委托事件,这些文件有助于在运行时移动控件.我想取消订阅这些事件的原因是控件(在这种情况下是按钮)将再次被锁定而无法移动.这是helper类中的方法:

 public static void Init(Control control)
    {
        Init(control, Direction.Any);
    }

    public static void Init(Control control, Direction direction)
    {
        Init(control, control, direction);
    }

 public static void Init(Control control, Control container, Direction direction)
    {
        bool Dragging = false;
        Point DragStart = Point.Empty;

        control.MouseDown += delegate(object sender, MouseEventArgs e)
        {
            Dragging = true;
            DragStart = new Point(e.X, e.Y);
            control.Capture = true;
        };
        control.MouseUp += delegate(object sender, MouseEventArgs e)
        {
            Dragging = false;
            control.Capture = false;
        };
        control.MouseMove += delegate(object sender, MouseEventArgs e)
        { …
Run Code Online (Sandbox Code Playgroud)

c# events delegates anonymous

2
推荐指数
1
解决办法
4242
查看次数

如何创建一个“Observable”来观察“FileSystemWatcher”中的“Renamed”和“Changed”事件

我想创建一个Reactive Observable,它可以同时观察Renamed和。Changed

我正在监视文件夹中是否有已修改和重命名的文件FileSystemWatcher。我只想在事件稳定下来后处理该事件(因为有时Changed事件可能会引发多次)。所以我选择Throttle.net的功能Reactive Extension

我可以通过观察单个Changed事件来完成这项工作,但无法弄清楚如何ChangedRenamed单个Observable.

这是我为单个Changed事件所做的事情:

var watcher = new FileSystemWatcher();
watcher.Path = "d:\\test";
var observable = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>(
                            ev => watcher.Changed += ev,
                            ev => watcher.Changed -= ev
);

var d = observable.Throttle(TimeSpan.FromSeconds(5))
                    .Subscribe(
                        a => Console.WriteLine($"Watcher type:{a.EventArgs.ChangeType }, file:{a.EventArgs.Name }, sender: {a.Sender}"),
                        ex => Console.WriteLine("observer error:" + ex.ToString()),
                        () => Console.WriteLine("observer complete.")
                );

Run Code Online (Sandbox Code Playgroud)

但是当我想观看这两个事件时,VS 告诉我 …

filesystemwatcher system.reactive .net-core

1
推荐指数
1
解决办法
211
查看次数