[英]c# run windows form from console and run both of them
有一個控制台應用程序可模擬路由器功能(數據包切換等)。 我制作了一個簡單的Windows窗體,該窗體應顯示每個路由器的套接字使用了多少。 每個套接字具有不同的容量,並且每個“已連接”到套接字的表格都應顯示仍有多少容量。
到目前為止,我的代碼:
static void Main(string[] args)
{
//get number of router's sockets
args = Environment.GetCommandLineArgs();
int socketnumber = Convert.ToInt32(args[2]);
//get sockets' capacity
int[] array = new int[socketnumber];
for (int i = 0; i < socketnumber; i++)
{
array[i] = Convert.ToInt32(args[3 + i]);
}
現在,LRM是一個WinForm,它顯示每個套接字的狀態(或更准確地說,鏈接附加到套接字的狀態),因此我對其進行初始化並為其指定參數。
LRM[] lrm = new LRM[socketnumber];
for (int i = 0; i < socketnumber; i++)
{
lrm[i] = new LRM();
lrm[i].Show();
a++;
}
for (int i = 0; i < socketnumber; i++)
{
Console.WriteLine(array[i]);
lrm[i].capacity = array[i];
lrm[i].available = array[i];
lrm[i].WriteCapacity(lrm[i].capacity);
lrm[i].WriteAvailable(lrm[i].available);
}
路由器調用WriteCapacity和WriteAvailable來更新LRM上的值的方法,如下所示:
public void WriteAvailable(int ava)
{
MethodInvoker mi = delegate ()
{
textBox2.Text = ava.ToString();
};
Invoke(mi);
}
現在,我有當前的問題:
1)當Windows窗體的數量發生變化(由命令行參數設置)時,從控制台運行多個Windows窗體並維護其功能(同時執行所有功能)
2)更新LRM值。 當使用show()方法時,它僅顯示表單,它不提供任何值,並且在表單停止響應后不久,出現Windows錯誤。 當使用Application.Run()方法時,一種形式可以很好地運行,但是其他LRM和路由器的控制台都無法工作。
我感謝亞歷山大·彼得羅夫(Alexander Petrov)的回答,但我找到了解決問題的方法。
我嘗試了線程方法。 首先,我將大多數變量設為靜態:
static int[] array;
static LRM[] lrm;
static int port;
然后我做了一個將作為線程啟動方法的方法
private static void startLRM(int i)
{
Console.WriteLine(i);
lrm[i].Text = "LRM R" + ((port / 10) - 120).ToString() + " S" + a.ToString();
a++;
Console.WriteLine(array[i]);
lrm[i].capacity = array[i];
lrm[i].available = array[i];
lrm[i].WriteCapacity(lrm[i].capacity);
lrm[i].WriteAvailable(lrm[i].available);
lrm[i].ShowDialog();
}
然后,在Main()方法中,我為鏈接資源管理器分配了內存,在for循環中,我制作了所需數量的LRM。
lrm = new LRM[socketnumber];
for (int i = 0; i < socketnumber; i++)
{
lrm[i] = new LRM();
Thread thread = new Thread(() => startLRM(i));
thread.Start();
Thread.Sleep(150);
}
睡覺實際上是必要的,因為由於未知的原因,當我不在時會出現錯誤。
最終,我得到了我需要的-一個控制台應用程序,它顯示了正在發生的事情,以及幾個以漂亮的方式顯示一些值的Windows窗體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.