相关疑难解决方法(0)

自处理事件是否会阻止实例被垃圾回收?

我读了问题的答案.事件处理程序是否阻止了垃圾收集的发生?,但是当发布者成为目标时会发生什么?

更具体地说,我正在为WPF应用程序使用MVVM设计.Model-View类会在每次更改时引发NotifyPropertyChanged.在某些类中,我需要在修改某些内容时调用方法.

我想这样做:

this.PropertyChanged += this.MyHandler;
Run Code Online (Sandbox Code Playgroud)

这个实例会被GC破坏吗?

.net c# events garbage-collection mvvm

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

后台工作人员从不同的班级更新(最好通过活动)

我的GUI类中有一个后台工作程序.

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    ProgressClass obj = new ProgressClass();
    Importer tradeImporter = e.Argument as Importer;
    BackgroundWorker worker = sender as BackgroundWorker;
    List<TradeUploadInfo> list = obj.AllocateTrades2(tradeImporter, false);
    e.Result = list; //Passes the list for processing
}
Run Code Online (Sandbox Code Playgroud)

进口商是我自己的班级.现在,该AllocateTrades2方法已完成所有处理.

我的问题是,如何在不将bw作为参数传递的情况下在不同的类中执行方法bw.ProgressReport内部AllocateTrades2

如果有人向我解释如何用事件做这件事,但是如果还有另一种优雅的方式,那会很棒.我很开心.

c# events backgroundworker winforms

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

从列表中删除后,我应该将对象更改为Null吗?

我有一个类,里面有一个static List<T>字段,里面有我所有的东西; 每个对象代表一个正在运行的进程及其属性.

在该过程完成其工作后,相关对象将从中删除List<T>,然后我的UI将更新.

从我的列表中删除对象后,我应该将此对象更改null为释放资源吗?

c# dispose

3
推荐指数
3
解决办法
152
查看次数

GC.WaitForPendingFinalizers 之后未调用终结器

我读到了Eric Lippert 的精彩解释,内容是关于当一个对象通过事件引用另一个对象时,何时会被垃圾收集。

为了证明埃里克所说的,我尝试了这段代码:

using System;
                
public class Program
{
    public static void Main()
    {
        {
            var myClass = new GCClass();
            LongLivingClass.MyEvent += myClass.HandleEvent;
        } // LongLivingClass holds a reference to myClass
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        // expect: finalizer of GCLass not run

        {
            var myClass = new GCClass();
            myClass.MyEvent += LongLivingClass.HandleEvent;
        } // myClass can easily be GCed here
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        // expect: finalizer should run

        Console.WriteLine("Finish");
    }
}


class GCClass
{
    public event EventHandler MyEvent;
    public …
Run Code Online (Sandbox Code Playgroud)

c# events garbage-collection

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

如果垃圾收集器在Monotouch 4中"更具攻击性",这意味着什么?

我偶然发现了这个问题:ContentView中的按钮导致MonoTouch运行时崩溃.Monotouch 4.0中的错误?而询问者对Monotouch的"更具侵略性"的垃圾收集器存在问题.

  • 有人可以解释为什么在询问者的情况下会发出错误(收集什么以及为什么?)?
  • "更具攻击性"是什么意思?我可以陷入什么陷阱?我应该避免什么?
  • 关于iOS5:苹果声称iOS5应用程序将获得一个内存警告,然后它将被杀死.与之前的任何其他版本不同,应用程序收到三个警告.这对Monotouch意味着什么?它将如何处理这种行为?

也许其中一个Xamarin团队可以总结一些注意事项并给出一个很好的解释?

我目前正在从MT 3.2.6升级到MT 4.1,并希望查看我的代码并检查需要更改的内容.

.net mono garbage-collection xamarin.ios boehm-gc

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

如何处置包含事件的局部变量

可能重复:
事件处理程序是否阻止垃圾收集发生?

我有一个像这样的wp7应用程序:

private void button1_Click(object sender, RoutedEventArgs e)
{
    GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
    watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
    watcher.Start();
}

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    Debug.WriteLine(e.Position.Timestamp.ToString());
}
Run Code Online (Sandbox Code Playgroud)

单击两次按钮后,控制台将输出两次Timestamp.但观察者是一个局部变量!它出什么问题了?我怎么能打扰它呢?

c#

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