繁体   English   中英

如何通过超时实现WNetAddConnection2的等效?

[英]How to achieve the equivalent of WNetAddConnection2 with a timeout?

以下对WNetAddConnection2的调用似乎永远挂起。 请注意,机器名称是故意错误的 - 我希望快速失败而不是永久阻止。 有没有办法实现类似的功能但超时?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [StructLayout(LayoutKind.Sequential)]
        public class NETRESOURCE
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string LocalName;
            public string RemoteName;
            public string Comment;
            public string Provider;
        }
        [DllImport("mpr.dll")]
        public static extern int WNetAddConnection2(NETRESOURCE netResource, string password, string username, int flags);

        private void Form1_Load(object sender, EventArgs e)
        {
            NETRESOURCE myResource = new NETRESOURCE();
            myResource.dwScope = 0;
            myResource.dwType = 0; //RESOURCETYPE_ANY
            myResource.dwDisplayType = 0;
            myResource.LocalName = "";
            myResource.RemoteName = @"\\invalid.machine.com";
            myResource.dwUsage = 0;
            myResource.Comment = "";
            myResource.Provider = "";

            int returnValue = WNetAddConnection2(myResource, "password", "username", 0); //hangs forever
            Debug.Print("Finished connecting");
        }
    }
}

在早期版本的Windows上,无法终止卡在其中一个WNetAddConnection函数中的进程。 这已在Vista中修复。 根据Larry Osterman的说法 ,修复是CancelSynchronousIo函数。

您的问题的解决方案是:

  1. 启动一个新线程来运行WNetAddConnection2
  2. 设置计时器或在现有线程中等待。
  3. 超时后调用CancelSynchronousIo指定连接线程的句柄。

我想不出有什么原因会与.Net发生严重的互动,但我还没有尝试过......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM