Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin/Monotouch:自定义类事件_C#_Xamarin.ios_Xamarin.android_Xamarin - Fatal编程技术网

C# Xamarin/Monotouch:自定义类事件

C# Xamarin/Monotouch:自定义类事件,c#,xamarin.ios,xamarin.android,xamarin,C#,Xamarin.ios,Xamarin.android,Xamarin,我目前正在使用Xamarin和MonoTouch为iOS和Android构建一个应用程序。在应用程序中,将有大量从JSON加载的数据,因此我想合并一个统一加载程序,一个在应用程序启动时运行的对象,以检查是否需要重新下载信息 加载类已经完成,功能齐全,并且具有以下方法,我希望能够将事件绑定到这些方法。见下文: 开始加载 换装杆 重新加载层 重装跑步者 完成装载 这些都是自包含的,在loader类中运行,我在主屏幕(MainScreen.cs)的ViewDidLoad中使用以下代码启动该类: v

我目前正在使用Xamarin和MonoTouch为iOS和Android构建一个应用程序。在应用程序中,将有大量从JSON加载的数据,因此我想合并一个统一加载程序,一个在应用程序启动时运行的对象,以检查是否需要重新下载信息

加载类已经完成,功能齐全,并且具有以下方法,我希望能够将事件绑定到这些方法。见下文:

  • 开始加载
  • 换装杆
  • 重新加载层
  • 重装跑步者
  • 完成装载
这些都是自包含的,在loader类中运行,我在主屏幕(MainScreen.cs)的
ViewDidLoad
中使用以下代码启动该类:

var loader = new UnifiedLoader();
这将启动检查本地缓存、上次重新加载时间等的过程,并启动重新加载过程—POST、layers、RUNNER或直接跳到FinishedLoading

我希望能够以某种方式倾听这些“事件”,但我不知道如何去做。请看下面的例子

var loader = new UnifiedLoader();

loader.LoadingDidBegin += () => {
    Console.Out.WriteLine("Loading started");
    // Display spinner or something...
};

loader.DidReloadPosts += () => {
    Console.Out.WriteLine("Posts were reloaded");
    // Update reloading percentage, show user...
};

loader.DidReloadLayers += () => {
    Console.Out.WriteLine("Layers were reloaded");
    // Update reloading percentage, show user...
};

loader.DidReloadRunners += () => {
    Console.Out.WriteLine("Runners were reloaded");
    // Update reloading percentage, show user...
};

loader.LoadingDidFinish += () => {
    Console.Out.WriteLine("Loading finished");
    // Remove spinner, proceed...
};
到目前为止,我还不知道如何在加载类中实现这些事件。我一直在搜索和浏览API文档,但没有找到任何帮助

如果有人能帮我解决这个问题,我将不胜感激

提前感谢,,
Jonathan

我通过查找Microsoft C#events文档解决了这个问题。它与使用以下代码注册事件委托和事件一样简单

此代码超出了类的范围:

public delegate void LoadingDidBegin();
public event LoadingDidBegin LoadingDidBegin;
这段代码在类内部:

public delegate void LoadingDidBegin();
public event LoadingDidBegin LoadingDidBegin;
在要调用事件的方法中,调用以下命令:

// Trigger event:
if (this.CheckingDidBegin != null){
    this.CheckingDidBegin ();
}
最后,在绑定事件的类中,按如下方式绑定委托:

var loader = new UnifiedLoader ();

loader.LoadingDidBegin += delegate {
    // Do something here, show a HUD for instance...
};

loader.InitiateLoader ();
差不多就是这样,只要记住在启动携带事件触发器的方法之前注册委托,否则它们只会返回null,您将不会得到任何反馈


祝你好运

首选的方法是只写:

public EventHandler LoadingDidBegin;
这样可以避免声明代理,并符合编码准则: