![](/img/trans.png)
[英]In ASP.net C# how do I pass an argument from a Javascript function to the onclick handler
[英]How can I pass socket as an argument do ButtonClick handler function?
我需要将Socket变量传递给处理按钮单击的函数。 这是我要制作的Tic-Tac-Toe游戏,它将游戏的结果发送到服务器。 在我的ButtonClick()(用于9个单元格中的每个单元)中,我有一个函数来检查是否有人赢了,如果可以,它将结果发送到服务器。
我已经尝试启动客户端,每次胜利都将赢得支票功能,但我只是冻结程序,什么也不做。 我提出了一个想法,我可以在构造函数中启动客户端,然后在我的检查功能中仅发送有关获胜者的信息。 因此问题出现了,我无法通过事件处理函数传递套接字,因为它仅接受两个参数。
这些是按钮定义:
<Button Grid.Column="0" Grid.Row="0" x:Name="Button0_0" Click="ButtonClick" />
<Button Grid.Column="1" Grid.Row="0" x:Name="Button1_0" Click="ButtonClick" />
<Button Grid.Column="2" Grid.Row="0" x:Name="Button2_0" Click="ButtonClick" />
<Button Grid.Column="0" Grid.Row="1" x:Name="Button0_1" Click="ButtonClick" />
<Button Grid.Column="1" Grid.Row="1" x:Name="Button1_1" Click="ButtonClick" />
<Button Grid.Column="2" Grid.Row="1" x:Name="Button2_1" Click="ButtonClick" />
<Button Grid.Column="0" Grid.Row="2" x:Name="Button0_2" Click="ButtonClick" />
<Button Grid.Column="1" Grid.Row="2" x:Name="Button1_2" Click="ButtonClick" />
<Button Grid.Column="2" Grid.Row="2" x:Name="Button2_2" Click="ButtonClick" />
这是我的按钮处理程序:
private void ButtonClick(object sender1, RoutedEventArgs e)
{
if (mGameEnded) {
NewGame();
return;
}
//operations
CheckWinner();
}
这是我的检查功能的必要部分:
private void CheckWinner()
{
//checking operations
if (mGameEnded)
{
MessageBox.Show(winner, "Who won?");
// Encode the data string into a byte array.
byte[] msg = Encoding.ASCII.GetBytes(winner);
// Send the data through the socket.
sender.Send(msg);
}
}
如您所见,我需要将套接字通过ButtonClick()传递给CheckWinner()才能使用SendToServer()函数。
这不是最佳做法,但是...
向窗口添加另一个私有方法socketSend。
这需要像味精这样的参数。
这样可以实例化一个ockock,发送消息并关闭连接。
与ExecuteClient类似:
https://www.geeksforgeeks.org/socket-programming-in-c-sharp/
由于您的所有方法都是窗口的私有成员,因此您只需将套接字设为另一个私有成员,ButtonClick便可以引用它。
如果您正在学习用于专业用途的WPF,您可能会想知道最佳实践。
研究MVVM并将您的功能分成单独的类。 然后研究依赖注入。 如果您是初学者,那么所有这一切都需要一定的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.