所以情況就是這樣 - 當控制檯應用程序啓動時,它會創建3個線程永遠停留在那裏,並執行他們應該做的任何事情。則任何該等線程將能夠顯示一個Windows窗體作爲一個單獨的線程,因此不會等待它使用此代碼返回任何東西:C#從一個線程訪問不同線程的變量
public void RunThread()
{
Thread thread = new Thread(new ThreadStart(RunForm));
thread.Name = "StatusForm";
thread.Start();
}
public void RunForm()
{
Application.Run(new StatusForm());
}
此窗口的形式將試圖得到一些變數所有3個線程,我這樣做,使用:
int var1 = Manager1.InventoryEntriesOne
int var2 = Manager2.InventoryEntriesTwo
int var3 = Manager3.InventoryEntriesThree
的InventoryEntries在第一線中聲明如下(同去的其他2個線程):
public static volatile InventoryEntries
現在對於一些重ason發生了什麼是Windows窗體只顯示使用RunThread()
函數調出窗口的線程的變量。例如,如果線程1啓動窗口,則只顯示該線程的變量,對於線程2和3,它將全爲0.它需要能夠讀取來自所有3個線程的變量,哪個線程無關緊要推出了這個窗口。
謝謝。
-----------------編輯-------------------
讓我向您展示代碼中發生的事情的簡要示例。這是一個例子Manager1的,假設2名其他經理基本上都在做同樣的事情...
using System.Windows.Forms;
using System.Threading;
namespace Manager
{
public class Manager1 : Manager
{
public static volatile int InventoryEntriesOne = 123;
public override bool OnSomeEvent()
{
InventoryEntriesOne = 555;
}
public override bool OnSomeOtherEvent()
{
RunThread();
}
public void RunThread()
{
Thread thread = new Thread(new ThreadStart(RunForm));
thread.Name = "StatusForm";
thread.Start();
}
public void RunForm()
{
Application.Run(new StatusForm());
}
}
}
因此,大家可以看到,該管理器打開Windows窗體,現在發生的事情以這樣的形式是這樣的:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Manager
{
public partial class StatusForm : Form
{
Timer refreshTimer = new Timer();
public StatusForm()
{
InitializeComponent();
PlotData();
refreshTimer.Interval = 5000; //5 seconds in milliseconds
refreshTimer.Tick += new EventHandler(refreshTimer_Tick);
refreshTimer.Start();
}
void refreshTimer_Tick(object sender, EventArgs e)
{
PlotData();
}
public void PlotData()
{
label1.Text = Manager1.InventoryEntriesOne.ToString();
label2.Text = Manager2.InventoryEntriesTwo.ToString();
label3.Text = Manager3.InventoryEntriesThree.ToString();
}
}
}
我希望你們能明白現在的問題。
定義InventoryEntries供參考:線程沒有父子關係.... – I4V
對不起,我新的編程,我只是不知道怎麼說,否則,你知道我的意思,父母和孩子在「父母」線程創建「孩子」線程,如果這甚至很重要。我嘗試了很多解決方案,但我一直都失敗。任何幫助將不勝感激。 – FrozenHaxor
您需要顯示錶單如何訪問管理變量的定義。 – tinman