2019-6-14-WPF-shows-that-some-windows-in-multithreading-will-be-locked-in-the-PenThreadWorker-constr...
2024-09-03 20:18:14
title | author | date | CreateTime | categories |
---|---|---|---|---|
WPF shows that some windows in multithreading will be locked in the PenThreadWorker constructor when the application starts
|
lindexi
|
2019-06-14 08:50:36 +0800
|
2019-06-11 19:28:43 +0800
|
WPF
|
Problem description:
WPF will initialize pen thread when the window initializing. But I find the window may be locked in PenThreadWorker constructor.
The UnsafeNativeMethods.CreateResetEvent
will lock the thread.
Actual behavior:
I use multithreading to create some windows by this code and maybe the thread be locked in PenThreadWorker constructor.
The Demo code
public partial class App : Application
{
/// <inheritdoc />
protected override void OnStartup(StartupEventArgs e)
{
var thread = new Thread(() =>
{
var mainWindow = new MainWindow();
mainWindow.Show();
Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
base.OnStartup(e);
}
}
The step
- Run the code
- Use the VisualStudio to suspend the application
Maybe you can find the application only create aStylus Input
thread and show only a main window and the other main window and the thread be locked in PenThreadWorker constructor and the window can not show
Why I need multithreading to show the windows? I need the splash window to show the welcome page and then I should show the main window in other thread to do the bussiness code and I should close the splash window when the main window showed.
But I found some users could not show the main window and the main window be lock in PenThreadWorker constructor.
I use dnspy to suspend the application and find the code run in PenThreadWorker constructor and theUnsafeNativeMethods.CreateResetEvent
will lock the thread.
PenThreadWorker..ctor()
PenThread..ctor()
PenThreadPool.GetPenThreadForPenContextHelper(PenContext penContext)
PenThreadPool.GetPenThreadForPenContext(PenContext penContext)
WispTabletDeviceCollection.UpdateTabletsImpl()
WispTabletDeviceCollection.UpdateTablets()
WispTabletDeviceCollection..ctor()
WispLogic.get_WispTabletDevices()
WispLogic.RegisterHwndForInput(InputManager inputManager, PresentationSource inputSource)
HwndStylusInputProvider..ctor(HwndSource source)
HwndSource.Initialize(HwndSourceParameters parameters)
HwndSource..ctor(HwndSourceParameters parameters)
PresentationFramework.dll!System.Windows.Window.CreateSourceWindow(bool duringShow)
PresentationFramework.dll!System.Windows.Window.CreateSourceWindowDuringShow()
PresentationFramework.dll!System.Windows.Window.ShowHelper(object booleanBox)
Expected behavior:
The UnsafeNativeMethods.CreateResetEvent
do not lock the thread
Minimal repro:
Create a empty WPF application and then change the app.xaml.cs code
public partial class App : Application
{
/// <inheritdoc />
protected override void OnStartup(StartupEventArgs e)
{
var thread = new Thread(() =>
{
var mainWindow = new MainWindow();
mainWindow.Show();
Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
base.OnStartup(e);
}
}
Run the code and maybe you can find one of the main window can not show and it stop in UnsafeNativeMethods.CreateResetEvent
and I wait for a hour but it can not run.
最新文章
- 生产服务器环境最小化安装后 Centos 6.5优化配置[转]
- [OpenJudge 3066]随机序列
- POJ 3261 (后缀数组 二分) Milk Patterns
- AJAX请求也会重新刷新整个页面?
- Revit 2015 API 的全部变化和新功能
- Python3 操作Excel--openpyxl
- hdu_5110_Alexandra and COS(DP+分块思想)
- vue keep-alive内置缓存组件
- for ,foreach ,map 循环的区别
- SVN命令备忘录
- 安排~~炒鸡全的JS兼容问题,码上-----【XUEBIG】
- 给table加边框的样式
- Thinkphp 中的自动验证 上一篇有例子
- hive GenericUDF1
- Listary Pro- 文件浏览与搜索增强的超级神器
- Npm基本指令(转)
- IOPS、带宽(band width)、吞吐量 (throughput)
- 1106-冒泡算法C程序(语法树)
- leetcode-77-组合
- javascript屏蔽浏览器右键功能按钮
热门文章
- springboot mail 发送邮件
- vsftp 被动模式配置
- 能轻松背板子的FWT(快速沃尔什变换)
- .net下MVC中使用Tuple分页查询数据
- ";一个实用的却被忽略的命名空间:Microsoft.VisualBasic";:
- Web开发-Servlet&;HTTP&;Request
- 面试系列 30 如何自己设计一个类似dubbo的rpc框架
- Python全栈开发:线程代码实例
- odoo 在更多下面直接调用方法
- [JZOJ3297] 【SDOI2013】逃考