使用 Invoke() 显示来自 Threading.Time() 线程的表单
Using Invoke() to show Form from Threading.Time() thread
我有以下内容:
public static Form1 MainForm = new Form1();
static ManualResetEvent _running = new ManualResetEvent(false);
[MTAThread]
private static void Main()
{
int startin = 60 - DateTime.Now.Second;
var t = new System.Threading.Timer(o => Analyze(),
null, startin*1000, 60000);
_running.WaitOne();
}
public static void Analyze()
{
Action a = new Action(() => MainForm.ShowDialog());
MainForm.Invoke(a);
}
我很难尝试显示我拥有的唯一表单 - MainForm。
我做错了什么?
当您调用 MainForm.Invoke
时,您是在告诉表单安排应用程序循环中提供的操作 运行,表单正在 运行ning 中。当您调用该方法您的表单 没有应用程序循环 ,因此 运行 您安排的操作没有任何意义,因此它不会 运行 .
具有讽刺意味的是,您尝试在应用程序循环中安排的操作是应用程序循环的创建。
您需要启动您的应用程序循环(使用 Application.Run
),创建您的表单,完成后您可以安排该应用程序执行的工作。
我有以下内容:
public static Form1 MainForm = new Form1();
static ManualResetEvent _running = new ManualResetEvent(false);
[MTAThread]
private static void Main()
{
int startin = 60 - DateTime.Now.Second;
var t = new System.Threading.Timer(o => Analyze(),
null, startin*1000, 60000);
_running.WaitOne();
}
public static void Analyze()
{
Action a = new Action(() => MainForm.ShowDialog());
MainForm.Invoke(a);
}
我很难尝试显示我拥有的唯一表单 - MainForm。
我做错了什么?
当您调用 MainForm.Invoke
时,您是在告诉表单安排应用程序循环中提供的操作 运行,表单正在 运行ning 中。当您调用该方法您的表单 没有应用程序循环 ,因此 运行 您安排的操作没有任何意义,因此它不会 运行 .
具有讽刺意味的是,您尝试在应用程序循环中安排的操作是应用程序循环的创建。
您需要启动您的应用程序循环(使用 Application.Run
),创建您的表单,完成后您可以安排该应用程序执行的工作。