嘗試#2。無法更新子類的主窗體控件
我試圖在兩個類中調用函數。一種獲得B類數據和調用函數B以通過Windows Form應用程序顯示數據的函數。
//Class B containing function B
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GUI_Server
{
public partial class ChatServer : Form
{
private delegate void EnableDelegate(bool enable);
private static ChatServer CHT = new ChatServer();
public ChatServer()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ServerBackBone.test();
}
public static void TestConnectivity(string text)
{
CHT.TestLabel.Text = text;
}
}
} // Assume Class B
及以下爲A級和功能
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace GUI_Server
{
class ServerBackBone
{
private static ChatServer CHT = new ChatServer();
public static void test()
{
ChatServer.TestConnectivity("test");
}
}
}
那麼,究竟是怎麼回事是窗體被加載,調用A類中的靜態函數聯繫B類>函數B更新主窗口上的標籤...問題在於用新文本更新標籤。
單步執行代碼顯示所有函數都被成功調用&期望的文本被傳遞給函數。
雖然,按F5時開始調試所述應用,診斷工具顯示以下信息:
:的診斷工具意外
診斷轂輸出顯示失敗
響應狀態碼不表示成功:401(未授權)。
通用輸出顯示:
線程0x20c0已經退出,代碼0(爲0x0)。
線程0x1624已退出,代碼爲0(0x0)。
'GUI Server.vshost.exe'(CLR v4.0.30319:GUI Server.vshost.exe): 加載「C:\用戶\神泣\文件\的Visual Studio 2015年\項目\ GUI 服務器\ GUI服務器\ bin \ Debug \ GUI Server.exe「。符號加載。
線程0x20fc已退出代碼0(0x0)。
線程0xae8已退出,代碼爲0(0x0)。
應用程序在這些消息顯示後成功運行。逐步顯示錯誤,也不會出現斷點。標籤未在主控制中更新
全新的項目。只有實際表單界面上的元素是屬性重命名爲TestLabel的標籤。
this.TestLabel = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// TestLabel
//
this.TestLabel.AutoSize = true;
this.TestLabel.Location = new System.Drawing.Point(43, 70);
this.TestLabel.Name = "TestLabel";
this.TestLabel.Size = new System.Drawing.Size(35, 13);
this.TestLabel.TabIndex = 0;
this.TestLabel.Text = "label1";
也許是這樣。該塊和不得不使用這種方法是,我在主應用程序中使用靜態類功能,當它正在備份和運行。解決辦法保持靜態? –
將您的'public static void Test()'更改爲'public static string Test()',它將返回要在窗體上使用的值。如果它是異步的,你可以'等待'或者使用事件監聽器 – Jonathan
這將毫無疑問地解決當前問題,這個問題值得我們思考的是我最終將使用套接字來發送/接收數據,這兩個整數和字符串。用Sockets看到的例子,它使用了一個回調函數,並且什麼都沒有返回,並且可以在任何時候被調用,人們將如何去監聽一個事件,該事件使用一個單獨的函數作爲正在運行的回調在後臺?當數據被接收時,哪一個也會更新主窗體? –