小编Dav*_*Caz的帖子

CLR无法从COM上下文0x3b2d70转换到COM上下文

在调试应用程序时,我收到以下错误.

CLR无法从COM上下文0x3b2d70过渡到COM上下文0x3b2ee0 60秒.拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息.这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积.为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息.

为什么系统会抛出此错误.

c#

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

使用SharpZipLib将文件添加到没有路径的ZIP

我需要将3个文件合并为1个zip文件,并为用户下载.除了一件事,我能够实现我的要求:它将文件压缩到子文件夹中.

例如,我的文件位置如下:

C:\TTCG\WebSites\Health\ABC.CSV
C:\TTCG\WebSites\Health\XYZ.CSV
C:\TTCG\WebSites\Health\123.CSV
Run Code Online (Sandbox Code Playgroud)

但是在zip文件中,它使用"TTCG\WebSites\Health \"作为路径压缩文件夹中的文件.请参阅附件.

例

我不想要路径中的文件夹.我只想在没有文件夹的zip文件中有3个文件.我怎样才能做到这一点?

我生成zip文件的代码如下:

ZipFile z = ZipFile.Create(Server.MapPath("~" + @"\Accident.zip"));

//initialize the file so that it can accept updates
z.BeginUpdate();

//add the file to the zip file        
z.Add(Server.MapPath("~" + @"\ABC.csv"));
z.Add(Server.MapPath("~" + @"\XYZ.csv"));
z.Add(Server.MapPath("~" + @"\123.csv"));        

//commit the update once we are done
z.CommitUpdate();
//close the file
z.Close();
Run Code Online (Sandbox Code Playgroud)

c# zip sharpziplib

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

Mercurial:列出"hg diff"文件

如何获取两个任意更改集之间修改的文件列表?

我唯一的猜测是这样的可怕:

# files where something has been added
hg diff -r AA -r BB|grep -- +++|cut -f1|cut -d/ -f2- >/tmp/ka

# files where something has been removed
hg diff -r AA -r BB|grep -- ---|cut -f1|cut -d/ -f2- >>/tmp/ka

# filtering out "dev/null": it appears when a file is added or removed from the repository
sort -u /tmp/ka |grep -v dev/null
Run Code Online (Sandbox Code Playgroud)

也许有一个我没注意到的善变命令?


不是单个变更集的修改过的文件.
编辑:我需要这样做,因为我正在与一些青铜时代的程序员合作,他们不明白.diff是什么,请耐心等待...

mercurial

14
推荐指数
2
解决办法
2万
查看次数

访问Project> References窗口时出错?

在Visual Basic 6中,当我尝试访问Project> References时,它会抛出一个错误:

访问系统注册表时出错

我是:

  • 以本地计算机管理员身份登录
  • 运行Windows XP Professional和
  • 我可以regedt32.exe很好地执行和访问所有注册表项.

VB6作为本地管理员安装.

知道为什么会这样吗?


我正在运行水晶报告8.5,它应该已经解决了这个问题,但显然我仍然遇到8.5安装的问题.我也尝试重新安装水晶报告,但没有运气.

vb6 registry regtlib

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

是否可以将C#Enum暴露给COM Interop调用者,如果是这样,怎么样?

我有一个通过COM Interop调用的托管程序集.像VBScript客户端,Perl客户端等.

课程装饰有

[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)

然后当然我做了regasm的事情,所有方法都运行得很好.

但是程序集中也有枚举类型.我想使用符号名称COM应用程序,用于枚举值.

如何通过COM互操作公开枚举?我只需要添加这些属性吗?

[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)

然后,我如何在VBScript中引用这些符号名称?我没有看到OleView中的枚举类型.(我应该?)我在OleView中看到了所有其他类型.

.net com enums interop oleview

13
推荐指数
2
解决办法
9812
查看次数

如何创建清单文件以启动具有管理员权限的应用程序?

我想为我的VB 6.0程序创建一个清单文件,这样当我启动我的应用程序时,操作系统应该要求用户提供管理员权限.

我也想知道它如何嵌入到应用程序中?

windows vb6 uac manifest

13
推荐指数
2
解决办法
2万
查看次数

"推动创造新的远程头"问题

我阅读了有关此问题的所有SO问题,但仍然无法解决.我正在使用TortoiseHg.我在一个分支机构工作,现在我想把它合并回主分支.我撤消了在两个分支中进行的所有更改,更新到主分支,并合并(并提交).但是当我试图推动所有这些时,我得到"中止:推送创建新的远程头部"消息.我也试过(正如在SO中的一个问题中所建议的)使用--close-branch选项关闭分支.我唯一没有尝试的是"强迫"推动.

有什么建议?或者是推力唯一的选择?

见截图

version-control mercurial tortoisehg

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

C#和Java规范是否在有符号整数溢出时拼出相同的行为?

在C和C++中,未定义有符号整数上溢或下溢的行为.

在Java和C#(未经检查的上下文)中,行为似乎在某种程度上被定义.


从Java规范,我们有:

整数运算符不以任何方式指示上溢或下溢.

和:

Java编程语言对整数使用二进制补码表示[...]


从C#规范,我们有:

[...]在未经检查的上下文中,忽略溢出,并且丢弃不适合目标类型的任何高位.


通过测试两者,我得到了预期的环绕结果.从规范的措辞来看,我感觉在Java中结果是可移植的(因为语言需要2的补码表示),而C#可能有也可能没有结果(因为它似乎没有指定表示 - 只有高阶位被丢弃).

那么,两种语言规范是否都能在所有平台上保证相同的行为(只是用不同的措辞)?或者他们在我的测试用例中(在x86上和Sun的JRE和Microsoft的.NET下)恰好相同,但理论上在其他架构或实现方面可能有所不同吗?

c# java integer-overflow code-conversion language-lawyer

13
推荐指数
1
解决办法
226
查看次数

关于清单文件

最近,我遇到了一个非常奇怪的问题,这个问题只发生在Windows XP SP3和Vista中.这是我的步骤:

  1. 在桌面中创建两个新文件夹(假设文件夹名称为A和B)
  2. 将Microsoft GraphEdit(graphedt.exe)应用程序复制到A文件夹,然后也创建一个空graphedt.exe.manifest文件.运行时graphedt.exe,您将看到一条错误消息,graphedt.exe由于错误的清单而无法运行.
  3. 将Microsoft GraphEdit(graphedt.exe)应用程序复制到B文件夹,运行graphedt.exe并关闭它,然后创建一个空graphedt.exe.manifest文件,graphedt.exe再次运行,您将看到清单文件无法应用graphedt.exe.但是,如果您更改上次修改时间graphed.exe,则清单将再次起作用.

看起来Windows会在EXE第一次使用清单文件时记住状态,但如果更改EXE大小或上次修改日期,Windows也会重置旧的记忆状态.

manifest

12
推荐指数
1
解决办法
2393
查看次数

相当于VB在C#中的自定义RaiseEvent块?

(我知道标题听起来很容易,但坚持 - 这可能不是你认为的问题.)

在VB.NET中,我能够编写自定义事件.举个例子,我有一个单独的线程会定期引发事件,在那个事件上需要更新GUI.我不希望繁忙的线程打扰UI计算,我不想把Me.Invoke(Sub()...)放在事件处理程序中,因为它也是从GUI线程调用的.

我想出了这个非常有用的代码.GUI线程将设置EventSyncInvoke = Me(主窗体).然后线程可以像往常一样简单地引发事件TestEvent,没有特殊代码,它将在GUI线程上无缝执行:

Private TestEventDelegate As EventHandler
Public EventSyncInvoke As System.ComponentModel.ISynchronizeInvoke

Public Custom Event TestEvent As EventHandler
    AddHandler(value As EventHandler)
        TestEventDelegate = [Delegate].Combine(TestEventDelegate, value)
    End AddHandler

    RemoveHandler(value As EventHandler)
        TestEventDelegate = [Delegate].Remove(TestEventDelegate, value)
    End RemoveHandler

    RaiseEvent(sender As Object, e As System.EventArgs)
        If EventSyncInvoke IsNot Nothing Then
            EventSyncInvoke.Invoke(TestEventDelegate, {sender, e})
        Else
            TestEventDelegate.Invoke({sender, e})
        End If
    End RaiseEvent
End Event
Run Code Online (Sandbox Code Playgroud)

现在在C#中,我可以做到这一点:

public event EventHandler TestEvent
    add
    {
        testEventDelegate = (EventHandler)Delegate.Combine(testEventDelegate, value);
    }
    remove
    {
        testEventDelegate = (EventHandler)Delegate.Remove(testEventDelegate, value); …
Run Code Online (Sandbox Code Playgroud)

c# events

12
推荐指数
2
解决办法
3万
查看次数