问题列表 - 第22451页

如何判断一个线程是否是C#中的主线程

我知道还有其他帖子说你可以创建一个控件然后检查InvokeRequired属性以查看当前线程是否是主线程.

问题是你无法知道该控件本身是否是在主线程上创建的.

我使用以下代码来判断一个线程是否是主线程(启动该进程的线程):

if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA ||
    Thread.CurrentThread.ManagedThreadId != 1 ||
    Thread.CurrentThread.IsBackground || Thread.CurrentThread.IsThreadPoolThread)
{
    // not the main thread
}
Run Code Online (Sandbox Code Playgroud)

有谁知道更好的方法?看起来这种方式可能在运行时的未来版本中容易出错或中断.

.net c# multithreading

39
推荐指数
4
解决办法
4万
查看次数

无法通过Linux内核模块(Ubuntu)在内核内存中写入

我试图通过内核模块在虚拟机(使用VirtualBox)中覆盖内核内存(Linux 2.6.31,Ubuntu 9.10)中的某些部分.每当我这样做时,我都会收到此错误

[27154.303726] BUG:无法在0xc05769bc处理内核分页请求

我的代码:

unsigned char *p = (unsigned char *) c05769bc;
p[1] = (addr & 0x000000ff);
p[2] = (addr & 0x0000ff00) >> 8;
p[3] = (addr & 0x00ff0000) >> 16;
p[4] = (addr & 0xff000000) >> 24;
Run Code Online (Sandbox Code Playgroud)

地址是正确的,我的写代码也是如此.我只是使用指针写入内核内存.我想知道为什么我得到这条消息,因为该地址的内存页肯定是在内存中.

此行为是否与虚拟机有关?或者最近的内核是否有内置的某种保护?我希望有人能给我一些线索.

这个问题似乎与Ubuntu有关,因为使用Debian时相同的代码不会失败.

TIA!

威廉

linux memory kernel

5
推荐指数
1
解决办法
1231
查看次数

在VB.NET中获取字典功能的最简单方法是什么?

我想静态定义一个映射的字符串数组,如:

var dict = {cat:50, bat:10, rat:30};
Run Code Online (Sandbox Code Playgroud)

并在其中查找值,如:

MessageBox.Show( dict["cat"] )
Run Code Online (Sandbox Code Playgroud)

vb.net arrays string dictionary

1
推荐指数
2
解决办法
638
查看次数

Silverlight应用程序的(最佳)短名称是什么?

我一直想知道调用我的Silverlight应用程序的正确简写名称是什么 - 使用全名似乎有点麻烦,而不是与客户有关的交流.

这里有一些(舌头的脸)建议 - 我正在努力:

1)Silverlet 2)SLApp 3)Trinket 4)Xap 5)SLash 6)SLugin

有人知道官方的短名称或有其他建议吗?

silverlight

5
推荐指数
1
解决办法
137
查看次数

跨越VS项目的STL矢量腐败

我有一个Visual Studio 2005解决方案,其中包含几个彼此独立构建的项目.主项目静态链接其他项目.我在其中一个静态链接库中得到了非常奇怪的STL向量损坏.例如,我声明一个std :: vector然后执行一个sort( thatVector.begin(), thatVector.end() ),但是当我调试它并查看反汇编时,我看到:

std::vector<SomeOtherClass<SomeOtherTemplateType>,std::allocator<SomeOtherClass<SomeOtherTemplateType> > >::begin
Run Code Online (Sandbox Code Playgroud)

令人难以置信的奇怪的是,SomeOtherClass并且SomeOtherTemplate在主项目中声明,所以这个库应该完全不知道它们.

我试过冻结所有其他线程,认为其中一个可能是腐败thatVector,但没有骰子.我完全失去了.有没有人经历过这样的事情?

编译信息: - 主程序/ Zi,自定义优化(基本上是可调试的发布版本) - 静态库/ Zi,/ Od

链接信息:/ DEBUG

c++ stl vector visual-studio

4
推荐指数
1
解决办法
311
查看次数

C#的跨平台嵌入式数据库/键值存储

我正在寻找一个快速的,可嵌入的键/值存储,其中包含可以在.NET和mono中使用的密钥集合(或简单的可嵌入数据库)上的游标语义.需要它是开源的,更喜欢MIT或Apache风格的许可证而不是GPL许可证.只要二进制文件可用于Windows和Linux,就不要反对需要编写绑定的库.

考虑的选项:

  • SQLite - 具有绑定和本机实现,但是单线程并不是那么快
  • 嵌入式InnoDB - 我找不到.NET绑定,它是GPLv2
  • Berkley DB - 我找不到.NET绑定
  • 东京内阁 - 没有.NET绑定我可以找到并在Windows上构建有问题
  • MadCow内存映射数据结构 - GPLv2

是否有比上述更好的选项,我缺少,或上述我不知道的绑定?

更新:使用Oracle的官方BDB绑定4.8和5.0,但无法让它们在mono下工作.还有一些其他问题(BDB的C#驱动程序仍然不成熟).写了一篇名为Firkin(http://github.com/sdether/Firkin)商店的BitCask灵感K/V商店,现在改为使用它.

.net c# embedded-database nosql

7
推荐指数
1
解决办法
2860
查看次数

模糊数据库ID

我有一个主键自动递增的表.我希望有一个与主键关联的图像,但我不希望显示主键.将图像命名为:

$filename = md5($primarykey + $secret_string) . '.jpg';
Run Code Online (Sandbox Code Playgroud)

是个好方案吗?

我担心可能会发生冲突并且文件被覆盖.

另一种选择当然是生成一个随机字符串,检查它不作为文件存在并将其存储在数据库中......但如果不需要,id不想存储其他数据.

另一个选项是逻辑转换youtube url样式,例如1 = a 2 = b但是具有随机顺序,例如1 = x 2 = m ...但是那么它有可能被解码...加上md5可能是比任何youtube网址功能轻.

我猜我会处理超过200万条记录,那么碰撞的可能性是什么?您会选择哪个选项,还是想到更好的方法?

php mysql database

7
推荐指数
1
解决办法
3188
查看次数

Asp.Net页面生命周期 - 什么工具(可能是Reflector?)使我能够查看调用页面事件及其事件处理程序的顺序

1)我知道有很多网站描述在Asp.Net页面生命周期中调用事件的顺序.但是还有一个工具,也许是Reflector,它可以让我自己弄清楚在页面的生命周期中所有页面事件和事件处理程序的顺序是什么?

2)你会说试图找出引擎盖下的确切内容是一个好主意还是浪费时间?澄清一下 - 我想弄清楚构建控件树时到底发生了什么 - 因此所有方法调用,控制树所需的所有事件调用等都需要构建(我想有数百行或者数千行)用于构建控件树的代码.

感谢名单

.net c# asp.net

3
推荐指数
1
解决办法
701
查看次数

PrettyPhoto不适用于livequery

任何人都可以解释如何使用PrettyPhoto与livequery?

  $(document).ready(function()
  {
    $(".gallery a[rel^='prettyPhoto']").livequery(
    function()
    {
      $(this).prettyPhoto({theme:'facebook'});
    });
  });
Run Code Online (Sandbox Code Playgroud)

代码是正确的,但我认为livequery不支持PrettyPhoto.有人可以证实吗?

livequery prettyphoto

2
推荐指数
1
解决办法
2292
查看次数

在Windows Shell中将包含*(星号)字符的字符串作为命令行参数传递

我正在寻找一种方法,通过命令行将包含"*"字符的字符串传递给可执行文件.

  command.exe 3*2
Run Code Online (Sandbox Code Playgroud)

我想传递字符串3*2.相反,Windows会在当前目录中搜索与文件掩码"3*2"匹配的文件,并将找到的所有文件传递给command.exe

在双引号之间加上"3*2"也没有用,仍然是同样的问题.

我也试过'3*2'(在单引号之间),但随后传递了整个字符串(包括单引号),这不是我需要的.

有没有办法将字符串3*2(没有任何引号)传递给命令?

windows shell windows-shell

3
推荐指数
1
解决办法
6609
查看次数