C# wpfc中的WNetUseConnection阻塞应用#
我已经定义了一个backgroundworker,它在另一个线程中处理一个networkconnection,每当它调用WNetUseConnection(为了访问共享文件夹)时,它都会完全阻止应用程序,不管该函数是否在另一个线程中运行。我假设它一定是一个系统调用,在函数返回之前停止任何任务,但我想知道是否有任何方法可以在不阻塞应用程序的情况下完成此操作 Backgroundworker代码:C# wpfc中的WNetUseConnection阻塞应用#,c#,wpf,multithreading,C#,Wpf,Multithreading,我已经定义了一个backgroundworker,它在另一个线程中处理一个networkconnection,每当它调用WNetUseConnection(为了访问共享文件夹)时,它都会完全阻止应用程序,不管该函数是否在另一个线程中运行。我假设它一定是一个系统调用,在函数返回之前停止任何任务,但我想知道是否有任何方法可以在不阻塞应用程序的情况下完成此操作 Backgroundworker代码: private void Login() { if (bwWorker
private void Login()
{
if (bwWorker.IsBusy != true)
{
ErrorPanel.Visibility = Visibility.Collapsed;
bwWorker.RunWorkerAsync();
}
}
private void BackGroundWorkerLogin(object sender, DoWorkEventArgs e)
{
var credentials = new NetworkCredential(
(string)Application.Current.Properties["FileSystemUserId"],
(string)Application.Current.Properties["FileSystemUserPassword"]);
using (var netConnection = new NetworkConnection((string)Application.Current.Properties["FileSystemPath"], credentials))
{
e.Result = netConnection.ConnectionResult;
}
}
private void BackGroundWorkerLoginCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((int)e.Result != 0)
{
}
}
网络连接代码:
public NetworkConnection(string netName, NetworkCredential credentials)
{
networkName = netName;
var netResource = new NetResource
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType.Disk,
DisplayType = ResourceDisplaytype.Share,
RemoteName = networkName
};
var userName = string.IsNullOrEmpty(credentials.Domain)
? credentials.UserName
: string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);
var result = WNetUseConnection(
IntPtr.Zero,
netResource,
credentials.Password,
userName,
0, null, null, null);
ConnectionResult = result;
}
添加代码,,,是否在Dispatcher中调用它。是否有可能调用?请添加代码,以便我们可以看到发生了什么。我没有使用Dispatcher.Invoke阻止当前ui,wnetuseconnection阻止应用程序。