小编jon*_*_ou的帖子

C#Thread对象的生命周期

假设我有如下代码:

int Main()
{
    if (true)
    {
       new Thread(()=>
          {
              doSomeLengthyOperation();
          }).Start();
    }
    while (true)
    {
       //do nothing
    }
}
Run Code Online (Sandbox Code Playgroud)

有2个线程,我会打电话给主线程正在执行main()函数的线程,该线程被new'ed了里面的"如果"测试为主题A.

我的问题是,线程A什么时候被销毁?do doSomeLenghtyOperation()能够完成吗?

由于没有指向线程A的引用,它是否会被标记为垃圾收集的候选者:

  1. 紧接着"new Thread().Start()"语句本身完成了吗?
  2. 退出"if(true)"范围后立即?
  3. doSomeLengthOperation()运行完成后?
  4. 决不?

我看到的所有示例都是Main()持有引用,然后主线程在退出之前等待与线程A连接.我很好奇上面代码的生命周期是什么.

提前致谢!

c# multithreading object-lifetime

18
推荐指数
3
解决办法
8297
查看次数

以编程方式为WPF单元测试生成keydown press

我正在尝试对WPF控件进行单元测试,并且需要模拟按键按下.我在这里看到了一个可能的解决方案,但是当我尝试传入PresentationSource时,我不断获得一个空值(来自PresentationSource.FromVisual()或PresentationSource.FromDependencyObject()),这会触发异常.

我的问题是如何获得我可以在单元测试中使用的非null PresentationSource?

.net c# wpf unit-testing wpf-controls

15
推荐指数
3
解决办法
3356
查看次数

如何确定gdb中函数所属的共享库?

当我从gdb获取callstack时,我只获取函数名和源文件信息.

(gdb) f
#0  main (argc=1, argv=0xbffff1d4) at main.c:5

我没有得到该函数所属的共享库或应用程序.

在Windows上,Windbg或Visual Studio将显示带有"myDll!myFunc"格式的callstack,该格式显示该函数属于哪个模块.

目前在gdb中,我使用"info address [function]"来获取函数符号的地址,然后使用"info share"手动查找函数在内存中的范围,以确定它所在的库.

无论如何直接看图书馆没有这个手动过程?

callstack gdb shared-libraries

10
推荐指数
1
解决办法
3605
查看次数