例如,
Thread t = new Thread(function);
为什么不
Thread t = new Thread(function());
谢谢。
答案 0 :(得分:4)
function()
指的是您可以调用的函数的地址function
获得回报
功能的价值function()
创建一个新的匿名函数,它调用() => function()
(在这种情况下是一个简单的包装器)由于function
不返回其他功能
function()
不起作用,因为线程需要一个函数来调用。这意味着您必须使用
Thread t = new Thread(function());
或
Thread t = new Thread(function);
将函数传递给线程。
答案 1 :(得分:1)
<div id="riDiv" class="rightDiv" runat="server">
<asp:ListView runat="server" ID="lvItemDetails" style="border:solid; border-color:blue; border-width:10px;">
<LayoutTemplate>
<div>
<table>
<tr runat="server" id="itemplaceholder" class="TopboxDiv">
</tr>
<tr runat="server" id="itemPlaceHolder2">
</tr>
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<tr>
<div class="TopboxDiv">
<asp:Literal ID="litItemDesc" Text='<%# ".." + Eval("item_description") %>' runat="server" />
</div>
</tr>
<tr>
<div class="MidboxDivWrapper" runat="server">
<div class="leftTagDiv">
<div class="pc">Price</div>
</div>
<div id="middiv" class="MidboxDiv" runat="server">
<%--<div id="innerRadDiv">--%>
<asp:Panel runat="server" ID="pnlMidBoxDiv" BorderStyle="Solid" BorderColor="Pink" BackColor="Aqua" style="z-index:2 !important;">
<span>
<asp:RadioButtonList ID="rdCrService" runat="server" DataTextField="ServiceName" DataValueField="ServiceName" RepeatDirection="Horizontal" CssClass="radioDiv" >
</asp:RadioButtonList>
</span>
</asp:Panel>
<%--</div>--%>
<div class="radioDiv">
<asp:RadioButton id="rdPost" Text="Postoffice Price" runat="server" CssClass="radiotext" GroupName="radPriceGroup" />
<asp:Literal ID="litPost" Text="Rs. 100" runat="server" />
</div>
<%--<div class="radioDiv">
<asp:RadioButton id="rdOCS" Text="OCS Price" runat="server" CssClass="radiotext" GroupName="radPriceGroup"/>
<asp:Literal ID="litOCS" Text="Rs. 110" runat="server" />
</div>
<div class="radioDiv">
<asp:RadioButton id="rdTCS" Text="TCS Price" runat="server" CssClass="radiotext" GroupName="radPriceGroup"/>
<asp:Literal ID="litTCS" Text="Rs. 120" runat="server" />
</div>
<div class="radioDiv">
<asp:RadioButton id="rdOther" Text="Other Price" runat="server" CssClass="radiotext" GroupName="radPriceGroup"/>
<asp:Literal ID="litOther" Text="Rs. 120" runat="server" />
</div>--%>
</div>
</div>
</tr>
<tr>
<div class="bottomDivItemWrapper">
<div class="leftTagDiv">
<div class="pc">Color</div>
</div>
<div class="bottomDivItem">
<div class="radioDiv">
<%--<asp:RadioButton ID="Rad1" Text='<%# Eval("ServiceName") %>' runat="server" GroupName="testGrp" CssClass="radiotext"/>--%>
<asp:RadioButton id="rdWhite" Text="white" runat="server" CssClass="radiotext" />
</div>
</div>
</div>
<div class="OrderDivWrapper">
add cart and wishlist buttons. write cart and wishlist code functions so it can be called again and again.
</div>
</tr>
</ItemTemplate>
</asp:ListView>
</div>
是函数(签名)的委托,不会被执行。
function
将被执行,你将得到函数的结果。
答案 2 :(得分:1)
这一行
Thread t = new Thread(function);
是此行的简短版本:
Thread t = new Thread(new ThreadStart(function));
它使用C#2中引入的方法组语法从方法名称构造委托ThreadStart
。
另一方面,这一行
Thread t = new Thread(function());
使用function
方法返回的委托创建一个线程。当然function
必须返回ThreadStart
委托才能进行上述编译。
答案 3 :(得分:1)
在我回答之前,我有一个非常重要的问题,为什么在当前版本的.Net中使用Thread,使用Task和Parallel API,它们更清晰,更抽象。要了解其罚款,但不再使用
以下是Thread类的源代码,请仅使用ThreadStart
委托检查构造函数,粘贴在下面:
[System.Security.SecuritySafeCritical] // auto-generated
public Thread(ThreadStart start) {
if (start == null) {
throw new ArgumentNullException("start");
}
Contract.EndContractBlock();
SetStartHelper((Delegate)start,0); //0 will setup Thread with default stackSize
}
以下是ThreadStart委托
的源代码[System.Runtime.InteropServices.ComVisible(true)]
public delegate void ThreadStart();
所以Thread类只需要一个Delegate,返回void而没有输入,这是Thread t = new Thread(function)
中的函数指向的,实际上这是一个简短的形式,称为方法分组,否则完全成熟的形式将创建一个ThreadStart
对象,为其分配一个映射到其签名的函数。以下是其他选项:
() => Function()
// Lambda语法,直接在Thread构造函数中使用ThreadStart ts = new ThreadStart(Function)
//变量ts
可以在Thread构造函数中使用答案 4 :(得分:0)
功能只是&#34;功能&#34;变量
function()对它进行求值,并将其返回值作为参数传递给线程构造函数