Helloo全部 我目前正在开发具有TCP服务器以及一些其他功能的UWP应用。 我开发了一种方法,可以通过修改Mainpage.Caml.cs中的1个值(此处显示的代码)来更改背景颜色:
public sealed partial class MainPage : Page
{
public Windows.UI.Color backgroundColor;
public MainPage()
{
this.InitializeComponent();
BackgroundColor = Windows.UI.Color.FromArgb(255, 255, 255, 255);
MainConnection connector = new MainConnection();
connector.StartConnection("0.0.0.0", "10500");
}
public Windows.UI.Color BackgroundColor
{
get => backgroundColor;
set => backgroundColor = value;
}
}
我还使用getter和setter作为backgroundColor。 如您所见,我还有另一个名为ConnectionClass的类,该类处理连接并获取有关操作的说明。 ConnectionClass基于MSDN中公开的示例:
class MainConnection
{
private bool connectionAllowed = true;
public async void StartConnection(string net_aadress, string port_nr)
{
Windows.UI.Color backgroundColor;
backgroundColor = ChangeBackground(255, 255, 255);
try
{
var streamSocketListener = new StreamSocketListener();
// The ConnectionReceived event is raised when connections are received.
streamSocketListener.ConnectionReceived += this.StreamSocketListener_ConnectionReceived;
// Start listening for incoming TCP connections on the specified port. You can specify any port that's not currently in use.
await streamSocketListener.BindServiceNameAsync(port_nr);
Debug.WriteLine("server is listening...");
//Mainpage.viewModel.BackgroundColor = Windows.UI.Color.FromArgb(255, 255, 0, 255);
}
catch (Exception ex)
{
Windows.Networking.Sockets.SocketErrorStatus webErrorStatus =
Windows.Networking.Sockets.SocketError.GetStatus(ex.GetBaseException().HResult);
Debug.WriteLine((webErrorStatus.ToString() != "Unknown" ? webErrorStatus.ToString() : ex.Message));
}
}
private async void StreamSocketListener_ConnectionReceived(
Windows.Networking.Sockets.StreamSocketListener sender,
Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
{
do
{
RecievePacket();
decodePacket(); //using switch case
switch(command)
case endConnection:
connectionAllowed = false;
SendResponsePacket();
break;
case changeBackground:
//in here we find out that we have to set BackgroundColor to some other color. How can i pass R G and B values from here to main
SendResponsePacket();
break;
}
while(connectionAllowed == true)
}
Windows.UI.Color ChangeBackground(UInt16 r, UInt16 g, UInt16 b)
{
return Windows.UI.Color.FromArgb(255, (byte)r, (byte)g, (byte)b);
}
}
在ConnectionClass中,存在一种情况,我们突然从解码包中发现我们必须更改backgroundColor,但是该属性存在于MainPanel.xaml.cs中 如何从刚刚指出的范围访问和更改该参数?
答案 0 :(得分:1)
最好的方法是让您的Connection
类在发生错误时公开事件,然后MainPage
可以为该事件注册一个处理程序,并在事件为上调。这样,网络堆栈中的低级错误不会与UI的高级属性紧密耦合(这将是一个糟糕的设计)。
如果您需要帮助来创建活动,请参见Handling and Raising events on MSDN
另外,您的字段backgroundColor
是public
也不有意义-应该是private
,因为您有一个public
属性获取器/设置器。您甚至可以完全忽略该字段,而仅依靠自动实现的属性:
public Color BackgroundColor { get; set; }