相关疑难解决方法(0)

何时以及为何使用代表?

我在C#中比较新,我想知道何时适当地使用Delegates.它们被广泛用于事件声明中,但何时应该在我自己的代码中使用它们,为什么它们有用? 为什么不用别的东西?

我也想知道何时必须使用代表,我别无选择.

感谢您的帮助!

编辑:我想我已经在这里找到了代表必要用法

.net c# delegates

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

事件和代表之间的差异及其各自的应用程序

除了语法糖之外,我没有看到使用事件而不是代理的优点.也许我是误会,但似乎事件只是代表的占位符.

你能告诉我差异以及何时使用哪个?有哪些优点和缺点?我们的代码严重依赖于事件,我想深入了解它.

你何时会在事件中使用代表,反之亦然?请在生产代码中说明您对这两者的真实体验.

c# events delegates

106
推荐指数
4
解决办法
8万
查看次数

具有零参数的动作委托

我在使用Action委托的许多在线示例中看到了这一行:

public event Action MyEvent;
Run Code Online (Sandbox Code Playgroud)

但是当我在自己的代码中尝试它时,我得到了这个错误

使用泛型类型'System.Action'需要'1'类型参数

文档肯定描述了一种没有任何类型参数的Action形式.我错过了什么?

c# delegates action

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

C#delegate vs eventHandler

我想在发生陷阱时向任何订户通知警报消息.

我通过委托方法(myDelegate del)制作的代码很好.

我的问题是......

  1. 我想知道是否值得使用Eventhandler更好的代理?在我的情况下,不确定委托和事件之间的区别是什么?

  2. 通知(trapinfo t),这就是我在这里所做的,以获取陷阱信息.但似乎不是一个好主意.阅读一些介绍传递委托对象的在线教程课程,是否适合我的情况?我该怎么办?有什么建议?

非常感谢 :)

我的代码:

public class trapinfo
    {
        public string info;
        public string ip;
        public string cause;
    }

    public class trap
    {
        public delegate void myDelegate(trapinfo t);
        public myDelegate del;

        trapinfo info = new trapinfo();

        public void run()
        {
            //While(true) 
            // If a trap occurred, notify the subscriber
            for (; ; )
            {
                Thread.Sleep(500);
                foreach (myDelegate d in del.GetInvocationList())
                {
                    info.cause = "Shut Down";
                    info.ip = "192.168.0.1";
                    info.info = "Test";
                    d.Invoke(info);
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# delegates event-handling observer-pattern

20
推荐指数
2
解决办法
5万
查看次数

为何使用活动?

我理解事件在C#中的运作方式(在这个领域是一个公平的新手).我想要了解的是我们使用事件的原因.

您是否知道使用事件的编码良好/架构好的应用程序?

c# architecture winforms

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

如何使用addHandler引发事件

我对Vb.Net事件和处理程序很满意.任何人都可以帮助我如何在c#中创建事件处理程序,并引发事件.

c# vb.net events handler c#-3.0

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

在Windows 8应用程序中为DispatcherTimer的Tick事件定义事件处理程序

我正在Windows 8 Visual Studio 11中开发一个应用程序,我想为DispatcherTimer实例定义一个事件处理程序,如下所示:

public sealed partial class BlankPage : Page
    {

        int timecounter = 10;
        DispatcherTimer timer = new DispatcherTimer();
        public BlankPage()
        {
            this.InitializeComponent();
            timer.Tick += new EventHandler(HandleTick);
        }

        private void HandleTick(object s,EventArgs e)
        {

            timecounter--;
            if (timecounter ==0)
            {
                //disable all buttons here
            }
        }
        .....
}
Run Code Online (Sandbox Code Playgroud)

但是我得到以下错误:

Cannot implicitly convert type 'System.EventHandler' to 'System.EventHandler<object>'
Run Code Online (Sandbox Code Playgroud)

我是widows 8应用程序的新手开发者.

你能帮帮我吗?

windows-8

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

无法将类型'System.EventHandler'隐式转换为'System.EventHandler <object>'以完成情节提要

我已经阅读了一些关于此的线索,但我仍然不知道如何在我的情况下解决它.我来自Java,大多是C#的新手

我想在动画结束时附加监听器:

myStoryBoard.Completed += new EventHandler(onMyStoryBoardCompleted);
Run Code Online (Sandbox Code Playgroud)

和:

private void onMyStoryBoardCompleted(object sender, EventArgs e)
{       
}
Run Code Online (Sandbox Code Playgroud)

我在标题中得到错误.我试过了:

 myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted);
Run Code Online (Sandbox Code Playgroud)

但后来我得到:

no overload for 'onMyStoryBoardCompleted' matches delegate 'System.EventHandler<object>'
Run Code Online (Sandbox Code Playgroud)

所以似乎签名与EventHandler不兼容,<object>我找不到如何使它兼容,我也不知道这种方法是否正确.

我读

了解C#中的事件和事件处理程序

从System.EventHandler到System.EventHandler <TEventArgs>的C#动态模板隐式转换错误

在Windows 8应用程序中为DispatcherTimer的Tick事件定义事件处理程序

但仍然没有找到这种情况的解决方案.

提前致谢.

c# microsoft-metro windows-8

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

如何传递事件参数?

我在C#中注意到我可以覆盖Form()父类中的方法,如下所示:

    protected override void OnPaint(PaintEventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

我不明白如何PaintEventArgs生成以及如何/何时将其传递给此函数.我必须假设OnPaint()每次表格需要重新绘制时都会调用.

此外,当我创建按钮按事件时,它们看起来像这样:

    private void button1_Click(object sender, EventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

再次,我不明白激活按钮点击时这些参数是如何/为什么传递的.

.net c# events

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

打开TK差异onRenderFrame和onUpdateFrame?

我目前正在使用OpenTK Framework和OpenGL在C#中编写Jump n'Run游戏.

Open TK提供类似GameWindow.Run();或的预设功能GameWindow.onUpdateFrame(); onRenderFrame();

据我所知,绘制OpenGL元素或基元的所有动作都属于onRenderFrame,而玩家移动等游戏事件应该在onUpdateFrame中执行,因此可以在渲染新帧之前预先计算这些动作.

我对吗?在onRenderFrame方法中执行所有操作会有所不同吗?OpenTK建议不要覆盖这些方法并订阅他们的事件(onRenderFrameEvent).

http://www.opentk.com/files/doc/class_open_t_k_1_1_game_window.html#abc3e3a8c21a36d226c9d899f094152a4]

什么是订阅,我将如何订阅事件而不是覆盖方法?

protected override void OnUpdateFrame(FrameEventArgs e)
{
    base.OnUpdateFrame(e);

    this.gameObjects.moveObjects();

    this.player.Move();
    if (this.player.jumpstate == true) this.player.Jump();
}

protected override void OnRenderFrame(FrameEventArgs e)
{
    base.OnRenderFrame(e);

    GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

    Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY);
    GL.MatrixMode(MatrixMode.Modelview);
    GL.LoadMatrix(ref modelview);

    GL.LoadIdentity();
    GL.Translate(0.0f, 0.0f, -3.5f);

    this.gameObjects.drawObjects();
    this.player.Draw();

    SwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)

opengl methods overriding subscribe opentk

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