vsto java,从Excel VSTO项目打开WPF应用程序

我有用C#编写的VSTO Excel工具,我使用WPF表单来显示一些数据 . WPF表单位于不同的项目中,但与Excel VSTO项目在同一解决方案中 . 如果我用Excel在同一个线程中打开WPF表单,它会以某种方式损坏Excel并开始做一些奇怪的事情 . 但是如果我在不同的线程中运行WPF表单,一切都很完美 . 所以下面的代码应该没问题:

if (app != null)

{

// When click the button again and WPF form is opened already, bring it on top.

BringDatabaseToFront();

}

else

{

t = new Thread(() =>

{

app = new App(_synchronizationContext, currentCaller);

App.ResourceAssembly = app.GetType().Assembly;

app.InitializeComponent();

app.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

/* Makes the thread support message pumping

* Dispecher is the Context of the WPF DB form */

Dispatcher.Run();

});

// WPF MUST be on a single-threaded apartment

t.SetApartmentState(ApartmentState.STA);

t.Start();

}

当我关闭工具(Excel)时,问题就开始了 . 它冻结并永远冻结 . 我已经尝试了许多不同的方式来关闭WPF表单,但唯一可以工作并关闭所有内容的方法是:

public void ShutDownAttempt()

{

Environment.Exit(0);

}

这有效,但现在我有另一个问题 . 如果用户打开了其他几个Excel工作簿,则此代码会在没有任何警告的情况下关闭所有这些工作簿,即使它们具有未保存的数据 . 所以这很危险 .

如果WPF应用程序在主应用程序的另一个线程上运行,那么看起来并不容易 . 有没有人有从Excel使用WPF表单的经验?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值