委托同时打开 2 个无参数消息框

本文关键字:参数 消息 | 更新日期: 2023-09-27 18:36:37

我正在尝试学习委托的用法, 我看到的所有代码示例都使用参数传递给内部方法,

该示例的目标是在表单启动时打开 2 个消息框而不传递参数这是我尝试过的代码,但我不知道如何调用内部函数

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Messageboxes2
{
public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        Delegation delegated = new Delegation();
        delegated.
    }
}
class Delegation
{    
    public delegate string mbox ();
    static void msgboz1(mbox d)
    {
        MessageBox.Show("1rstBox");
    }
    static void msbox2(mbox d)
    { 
        MessageBox.Show("2ndbox");
    }
}
}

感谢您的帮助

委托同时打开 2 个无参数消息框

首先从这两个方法中删除参数。然后,如果您了解 lambda 表达式,那么:

mbox myMboxDelegate = new mBox(() =>
{
   msgboz1();
   msbox2();
});
myMBoxDelegate();

或尝试:

mbox myMboxDelegate = new mBox();
myMboxDelegate += msgboz1();
myMboxDelegate += msbox2();
myMboxDelegate();

仅将委托作为参数传递不会调用该方法。您最好了解有关代表的更多信息,您可以尝试关注以更好地理解。

public partial class MainForm : Form
{
public MainForm()
{
    InitializeComponent();
    Delegation.Invoke(Delegation.msgboz1);
    Delegation.Invoke(Delegation.msbox2);
}
}
class Delegation
{    
public delegate void mbox ();
public static void msgboz1()
{
    MessageBox.Show("1rstBox");
}
public static void msbox2()
{ 
    MessageBox.Show("2ndbox");
}
public static void Invoke(mbox method)
{ 
    method();
}
}

编辑:可以使用 BeginInvoke 方法异步调用方法。

class Program
{
    static void Main(string[] args)
    {
        Delegation.MethodCaller mc1 = new Delegation.MethodCaller(Delegation.Method1);
        Delegation.MethodCaller mc2 = new Delegation.MethodCaller(Delegation.Method2);
        mc1.BeginInvoke(null, null);
        mc2.BeginInvoke(null, null);
        Console.ReadLine();
    }
    class Delegation
    {
        public delegate void MethodCaller();
        public static void Method1()
        {
            Console.WriteLine("Method 1 Invoked");
            Thread.Sleep(2000);
            Console.WriteLine("Method 1 Completed");
        }
        public static void Method2()
        {
            Console.WriteLine("Method 2 Invoked");
            Thread.Sleep(2000);
            Console.WriteLine("Method 2 Completed");
        }
    }
}