所以情况就是这样 - 当控制台应用程序启动时,它会创建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