这段C#代码是什么意思?

3
有人能向我解释一下吗? 我有这样的代码,但我不知道它的含义。
void ConnectionManager_ConnectionFailed(object sender, EventArgs e)
{
    BeginInvoke((MethodInvoker)delegate()
    {
        if (cbAutoConnect.Checked)
            Connect();
        else
            State = ConnectState.NotFound;
    });
}

我的问题:

  1. 这个方法是一个EventHandler吗?

  2. 这段代码的目的是什么?

    BeginInvoke((MethodInvoker)delegate() {

  3. 当执行条件“Else”时,“State”会发生什么变化?

注:

Connect是一个方法。

State是由此代码描述的枚举。

public ConnectState State
        {
            get
            {
                return _State;
            }

            {
                if (_State == value)
                    return;

                _State = value;

                switch (value)
                {
                    case ConnectState.Connected:
                        DoingSomeThing;
                        break;

                    case ConnectState.Connecting:
                        DoingSomeThing;
                        break;

                    case ConnectState.NotFound:
                        DoingSomeThing;
                        break;
                }

                if (StateChanged != null)
                    StateChanged(this, new EventArgs<ConnectState>(value));
            }
        }

另一个提示

枚举初始化

public enum ConnectState { Connected, Connecting, NotFound }
ConnectState _State = ConnectState.NotFound;

我不确定具体是什么,但我认为这是针对“ConnectState”对象/类的自定义事件处理程序声明。
public EventHandler<EventArgs<ConnectState>> StateChanged;

1
+1 鼓励写得好的问题。希望每个新成员都能这样做。 - Micha
1
这是一个事件处理程序。更多详情请查看此链接:https://dev59.com/CnM_5IYBdhLWcg3w6X5e - prashant
@prashanth,delegate()是一个方法指针,而MethodInvoker则代表一个委托。下面@user3036342说connect()会一直重复执行,只要cbAutoConnect被选中。为什么会这样?我没有找到循环的代码。如果有任何关于这段代码的问题:BeginInvoke类似于Thread.Start()吗? - user3332360
3个回答

2

这个方法是EventHandler吗?

是的,它是。

这段代码的目的是什么?

你正在使用 delegate { ... } 定义一个匿名方法,然后将其转换为 MethodInvoker 委托,并将其传递给 Control.BeginInvoke 方法,该方法在创建控件的线程上异步执行此匿名方法。

当执行条件“Else”时,“State”会发生什么情况?

如果 cbAutoConnect.Checkedtrue,则调用 Connect 方法,否则 State 的值将更改为 ConnectState.NotFound,就这样。


如果检查了cbAutoConnect,那么Connect();是否会重复执行,这是由于BeginInvoke();的代码类似于Thread.start(),还是由其他原因引起的? - user3332360

1
这是一个事件处理程序,如果连接失败并且自动连接已选中,则尝试重新连接;否则,使用ConnectionState会给出“NotFound”错误。建议向编写此代码的程序员提问。

我无法联系到编写此代码的程序员,因此我尝试阅读该代码以进行开发。添加了一些小的功能。我仍然不明白为什么 Connect(); 会继续重复。我没有找到循环的代码。如果有任何关于这段代码的问题:BeginInvoke((MethodInvoker)delegate() { - user3332360

-2

1 可能是的,你也可以找出是谁调用了它以确保猜测。 2 异步执行匿名委托(方法)
3 呃~~ 这个成员的设置方法非常奇怪。

看这个:case ConnectState.NotFound: DoingSomeThing; 设置值后,还没有结束,如果状态改变了,继续DoingSomeThing。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接