控制台应用程序中的线程与WPF应用程序中的线程有什么区别

时间:2019-05-08 07:53:06

标签: c# wpf multithreading console

我正在用相同的代码用控制台应用程序和wpf应用程序编写c#编程,但是结果不同。

这是控制台应用程序中的代码。

javaAccessBridge = Jab.Instance;
javaAccessBridge.Init();
using (JavaApplication app = new JavaApplication())
{
    JavaApplicationContext context = new JavaApplicationContext()
    {
         ExecutableFile = @"c:\Dev\sq.jar"
     };
    app.Launch(context);
}
Thread.Sleep(5000);
// return 0, not found any jvm instance.
javaAccessBridge.EnumJvms().Count;

这是WPF中的代码

public MainWindow()
{
    InitializeComponent();
    javaAccessBridge = Jab.Instance;
    javaAccessBridge.Init();
}
private void Find_Click(object sender, RoutedEventArgs e)
{
    using (JavaApplication app = new JavaApplication())
    {
         JavaApplicationContext context = new JavaApplicationContext()
        {
             ExecutableFile = @"c:\Dev\sq.jar"
        };
        app.Launch(context);
     }
     // count 1 jvm instance.
   List<AccessibleJvm> jvms = javaAccessBridge.EnumJvms();
}

我运行应用程序,然后单击按钮触发Find_Click,并且jvms.Count = 1。 我认为原因是WPF的线程太多,一个用于MainWindow(),第二个用于Find_Click。但似乎不对。 因为我用2个线程编写了控制台应用程序,但结果没有改变。

javaAccessBridge = Jab.Instance;
public void InitLib()
{    
    javaAccessBridge.Init();
}
public void LaunchApp()
{
using (JavaApplication app = new JavaApplication())
{
    JavaApplicationContext context = new JavaApplicationContext()
    {
         ExecutableFile = @"c:\Dev\sq.jar"
     };
    app.Launch(context);
}

Thread init = new Thread(InitLib);
Thread app = new Thread(LaunchApp);
init.Start();
app.Start();
Thread.Sleep(5000);
// still return 0
javaAccessBridge.EnumJvms().Count;

0 个答案:

没有答案