c# - 控制台应用程序中的线程与 WPF 应用程序中的线程有什么不同
问题描述
我正在用 c# 编写一个程序,其中控制台应用程序和 wpf 应用程序具有相同的代码,但结果不同。
这是控制台应用程序中的代码。
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;
解决方案
推荐阅读
- ruby - Ruby:调用多个端点/嵌套 POST api 调用
- elasticsearch - 如何调整 ECK 集群的大小
- blazor - 在 Blazor 服务器端下载 xml 文件
- amazon-web-services - AWS - 启用延迟维护的 RedShift CloudFormation
- sql - PL/SQL 过程中带参数的偏移量
- ruby-on-rails - 使用 ruby 扩展,rubocop 和 Visual Studio Code
- ajax - 如何在数据表ajax中使用json返回的对象内部的数组列名?
- c++ - 我可以对 C++ 中的类和结构使用 static 关键字吗?
- firebase - Firebase Firestore 读取计数?
- sql - 如何在 SQL 中计算日期之间的天数/小时数