小编lep*_*pie的帖子

EnumWindow上的Windows 7 x64错误?

在这里看到简单的Delphi代码:

function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
  TMemo(Lparam).Lines.Add(IntToStr(Handle));
end;
Run Code Online (Sandbox Code Playgroud)

叫它 :

procedure TForm1.FormCreate(Sender: TObject);
begin
  EnumWindows(@EnumProc, Lparam(Memo1))
end;
Run Code Online (Sandbox Code Playgroud)

此代码在Windows XP,Window 7 x86和Windows 8中成功运行.

现在测试Windows 7 x64中的代码,它只返回一个项目,这意味着Windows只调用一次EnumProc,这意味着EnumProc的结果为false,没有更多的窗口可用于枚举...

现在将我们的EnumProc更改为:

function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
  TMemo(Lparam).Lines.Add(IntToStr(Handle));
  result:= True;
end;
Run Code Online (Sandbox Code Playgroud)

好的,这个怎么样?!它适用于任何版本的Windows,包括Windows 7 x64!

任何的想法 ?它是Windows中的错误还是我的代码中的错误?

关心Mojtaba.

delphi

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

Java minecraft jar扩展

好吧,这可能是一个愚蠢的问题.我知道minecraft是用Java编写的,Java不能改成exe文件.然而,当我下载minecraft时,它说minecraft.exe并作为exe文件运行,而不是CLASS文件.有人可以向我解释一下吗?

java minecraft

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

在线程之间共享bool,对天真的方法有任何陷阱吗?

我需要一个简单的bool来通知一个长时间运行的进程abord作为循环的一部分,如下所示:

bool Abort = false;
void MyLongRunningMethod()
{
while(true)
{
    // loop code goes here, takes 2 hours ish to run
    if(Abort)
       break;
}
}
Run Code Online (Sandbox Code Playgroud)

我知道如何正确地写这个,但是我想知道,如果我把它保留下来有任何风险吗?或者是唯一的风险(在我的情况下这是一个非问题)循环可以运行一个额外的时间(在写入的同时读取bool).

我错过了任何奇怪的边缘情况,或者这实际上是完全正确的,如果我对以下声明很好:"当abort为真时,该方法应该会中断,但可能会在没有副作用的情况下再运行一次"?或者我错过了一些可以彻底打破世界的东西?

c# multithreading

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

fork() 和 system() 调用没有按我预期的那样工作

我正在使用 fork() 和 system() 命令,当我运行此示例代码时,我发现子进程在系统调用完成后没有打印“Song complete...”行。这是正常的还是我错过了什么?

我认为 system() 会完成它的工作,然后返回到子进程并继续以愉快的方式退出或执行其他任务。这个代码示例不会发生这种情况。

     #include <sys/types.h> /* pid_t */
     #include <sys/wait.h>  /* waitpid */
     #include <stdio.h>     /* printf, perror */
     #include <stdlib.h>    /* exit */
     #include <unistd.h>    /* _exit, fork */

     int main(void)
     {
       pid_t pid;
       int i;
       pid = fork();

       if (pid == -1) {
          /*
           * When fork() returns -1, an error happened.
           */
          perror("fork failed");
          exit(EXIT_FAILURE);
       }
       else if (pid == 0) {
          /*
           * When fork() returns 0, we are in …
Run Code Online (Sandbox Code Playgroud)

c fork system

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

BLE 以编程方式发送密钥

当我将我的设备连接到我的外围设备时,他会问我一个密码(设备上会显示一个弹出窗口)。我想在连接期间以编程方式发送此密码。

我正在使用 CBCentralManager,但找不到发送它的方法。

有什么建议?

send ios bluetooth-lowenergy cbcentralmanager

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

使用任务时如何在STA线程上运行

我正在VS2010中开发VSTO Outlook加载项。在该ThisAddIn_Startup方法(外接程序启动时称为)中,我的代码需要检查Outlook是否在公司网络上运行。如果Outlook未在网络上运行,则大约需要3秒钟才能得到答案。因此,我将代码包装在一个Task中,以使其运行Async以确保它在检查时不会挂起Outlook。

例如

bool onNetwork = false;
Task task = Task.Factory.StartNew(() =>
{
    onNetwork = IsConnectedToNetwork();
});
Run Code Online (Sandbox Code Playgroud)

完成检查后,需要加载并显示相关表格。所以我将代码更改为:

Task task = Task.Factory.StartNew(() =>
{
    if (IsConnectedToNetwork())
    {
        OnNetworkForm onNetworkForm = new OnNetworkForm();
        onNetworkForm.Show();
    }
    else
    {
        OffNetworkForm offNetworkForm = new OffNetworkForm();
        offNetworkForm.Show();
    }
});
Run Code Online (Sandbox Code Playgroud)

但是需要将窗体加载到UI线程上。否则,InvalidOptionationException当它尝试加载并显示带有消息的表单时,我得到一个提示:

调用线程必须是STA,因为许多UI组件都需要STA。

我的问题是如何使窗体加载到UI线程上?

请注意

我不能使用await,因为那是C#5.0,而VS 2010不支持C#5.0。而且ThisAddin类不是控件,因此没有可用的BeginInvokeor Invoke方法。

c# multithreading vsto winforms

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

将一个 WinForm 停靠在另一个 WinForm 中

我遇到了一个问题,并且关于同一问题的旧答案不够新,所以我认为可以再次询问。我的问题是:如何将一个表单停靠在另一个表单中?使用Panel 和Form 会更合适吗?第一种选择可能吗?提前致谢。

.net c# winforms

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

ProgressBar十进制值

我有一个周期.迭代次数取决于用户的选择.我得到double的数量,但进度条只接受int;

double progr = 100 / (listBox2.Items.Count * listBox4.Items.Count);
progressBar1.Value += progr; <-
Run Code Online (Sandbox Code Playgroud)

.net c# winforms

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

为什么选择Int32.MaxValue = 2147483648?

我想知道为什么.NET中Int32的最大可能值是2147483647而不是2147483648.因为2³= 2147483648.

谢谢

.net c#

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

Enumerator.Current为null但集合具有数据.我究竟做错了什么

我有一个dctionary,我正在调用.GetEnumerator(); 并将其分配给变量.然后我使用新分配的变量来访问我的字典并更改值.但它是null并且给我一个NullException消息.见下面的代码:

这就是我的字典创建方式

public Dictionary<Tuple<int, int>, string> GenerateTable(int _x, int _y)
{
    int total = _x * _y;
    var grid = new Dictionary<Tuple<int, int>, string>(); //!Might need this later!

    for (int i = 1; i <= _x; i++) // outer loop is column 
    {
        for (int ii = 1; ii <= _y; ii++) // Inner loop is row -
        {
            grid.Add(Tuple.Create(i, ii), "O");
        }
    }
    return grid; // Should have same amount of elements as int total
}
Run Code Online (Sandbox Code Playgroud)

这是我调用.GetEnumerator的代码

 public …
Run Code Online (Sandbox Code Playgroud)

.net c# dictionary enumeration

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