0

我真的不喜欢必须创建委托来赋予线程功能。如果我当前正在使用方法 A 来工作,但后来意识到在线程中运行会更好,那么现在我必须创建一个委托和另一个方法来实际运行线程。所以现在我有方法 A 的启动线程,然后通过委托给方法 B 来工作。

我的问题是: *我可以将功能包装在线程声明本身中吗?*

就像是

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(
                new delegate()
                {
            SqlConnection Connection = Helpers.ConnectionHelper.CreateConnection();
            SqlCommand cmd = new SqlCommand("MarkNotificationRead", Connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = this.id;

            Connection.Open();

            try
            {
                cmd.ExecuteNonQuery();
            }

            catch 
            {

            }

            Connection.Close();
                });

我以前在某个地方看到过类似的事情,但再也找不到这个例子了。

4

1 回答 1

0

你所拥有的非常接近,只是细微的句法变化——去掉new, 和():

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(
            delegate
            {
        SqlConnection Connection = Helpers.ConnectionHelper.CreateConnection();
        SqlCommand cmd = new SqlCommand("MarkNotificationRead", Connection);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = this.id;

        Connection.Open();

        try
        {
            cmd.ExecuteNonQuery();
        }

        catch 
        {

        }

        Connection.Close();
            }));

另一种方法是使用 lambda 语法,您可以在其中摆脱ThreadStart调用:

System.Threading.Thread t = new System.Threading.Thread(
            () =>
            {
                  ...
            });
于 2013-05-11T23:20:28.977 回答