我有一个控制台应用程序,我正在移植到WPF.该应用程序有3个工作线程,在将一些输出结果打印到屏幕之前,它们都连接到主线程.我的理解是,如果我尝试在WPF应用程序中执行相同的操作,GUI将被阻止,并且不会对用户产生反应.那么如何通知父线程所有线程都已完成其工作?我认为解决方案将涉及委托和事件(或者可能是BackgroundWorker?),但我不清楚如何在线程终止时调用回调.
原始代码:
foreach (Thread t in threadList)
{
t.Start();
}
foreach (Thread t in threadList)
{
t.Join();
}
// print some results here
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码调用D3D11CreateDevice():
ID3D11Device* md3dDevice;
ID3D11DeviceContext* md3dImmediateContext;
D3D_DRIVER_TYPE md3dDriverType = D3D_DRIVER_TYPE_HARDWARE;
createDeviceFlags = D3D11_CREATE_DEVICE_DEBUG;
HRESULT hr = D3D11CreateDevice(
0,
md3dDriverType,
0,
createDeviceFlags,
0, 0,
D3D11_SDK_VERSION,
&md3dDevice,
&featureLevel,
&md3dImmediateContext);
Run Code Online (Sandbox Code Playgroud)
但是,存储的结果HRESTUL hr是E_FAIL.控制台具有以下输出:
Init Direct3D.exe中0x7590b9bc的第一次机会异常:Microsoft
C++异常:内存位置为0x0049ec64的_com_error ..
c:\ users\andrew\desktop\code\common\d3dapp.cpp(389):
D3D11CreateDevice(0,md3dDriverType,0 ,createDeviceFlags,0,0,D3D11_SDK_VERSION,&md3dDevice,&featureLevel,&md3dImmediateContext)
hr = E_FAIL(0x80004005)Init Direct3D.exe触发了断点
我不认为它是代码构建时的链接问题,但定义了以下附加依赖项:
d3d11lib
d3dx11d.lib
D3DCompiler.lib
Effects11d.lib
dxerr.lib
我的下一个想法是我的卡与D3D11不兼容.然而,这种情况并非如此.这是输出dxdiag:
------------------
System Information
------------------
Time of this report: 5/14/2012, 02:29:16
Machine name: WINDOZE
Operating System: Windows 7 Professional 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.120330-1504)
Language: …Run Code Online (Sandbox Code Playgroud)