다음 WNetAddConnection2 호출은 영원히 중단 된 것 같습니다. 기계의 이름이 의도적으로 잘못되었음을 유의하십시오 - 저는 이것을 영원히 차단하기보다는 빨리 실패하고 싶습니다. 유사한 기능을 달성 할 수있는 방법이 있지만 타임 아웃이 있습니까?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");
}
}
}
영원히 긴 시간이다. 기다린 지 얼마나 됐니? 결국 시간 초과되어야합니다. –
몇 분 :) 차라리 내 스레드를 몇 초 동안 기다리십시오. – Jon
스레드에 넣고 WaitHandle ('ManualResetEvent'와 같은)을 WaitOne에서 타임 아웃과 함께 설정하고 (더러운 방식으로) Thread.Abort를 사용하여 스레드를 종료합니다. –