所以有这样的情况——当控制台应用程序启动时,它会创建 3 个线程,这些线程永远留在那里,做他们应该做的任何事情。然后,这些线程中的任何一个都可以将 Windows 窗体显示为单独的线程,因此它不会等待它使用以下代码返回任何内容:
public void RunThread()
{
Thread thread = new Thread(new ThreadStart(RunForm));
thread.Name = "StatusForm";
thread.Start();
}
public void RunForm()
{
Application.Run(new StatusForm());
}
然后,此 windows 窗体将尝试从所有 3 个线程中获取一些变量,我这样做是使用:
int var1 = Manager1.InventoryEntriesOne
int var2 = Manager2.InventoryEntriesTwo
int var3 = Manager3.InventoryEntriesThree
第一个线程中的 InventoryEntries 声明如下(其他 2 个线程也是如此):
public static volatile InventoryEntries
现在由于某种原因,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());
}
}
}
如您所见,Manager 正在打开一个 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();
}
}
}
我希望你们现在能理解这个问题。