2010-05-10 34 views
2

我使用.NET中的WebClient类有非常奇怪的错误使用一个线程,当4WebClient的错误在.NET

的应用只是下载了互联网的一些文件和文本框提供输出(GUI是WPF)。做这个的方法如下:

void DownloadFiles(object files) { 
    var fileL = (List<string>) files; 
    foreach (string url in fileL) 
    { 
     byte[] data; 
     using (var k = new WebClient()) 
     { 
      data = k.DownloadData(url); 
     } 
     //Bunch of irrelevant code goes here... 
    } 
} 

(我加了试图占卜用[是的,我是绝望/无知]的解决方案,问题是即使WebClient的声明外初始化foreach循环)

现在只有当我在与WPF UI主线程分离的线程上执行此方法时才会出现此问题。如果它在UI线程上执行,那么它完美地工作。当与创建一个新的线程:

Thread t = new Thread(DownloadFiles); 
t.Start(files); 

第一次码进入循环,将工作,但是当它的循环内的第二次,我总是会收到TargetParameterCountException。

我无法理解这个错误。很感谢任何形式的帮助。

编辑 下面是异常详细信息:

Exception.Message = "Parameter count mismatch." 
Exception.InnerException = null 
Exception.Source = " mscorlib" 

堆栈跟踪如下:

at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
at System.Delegate.DynamicInvokeImpl(Object[] args) 
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
at System.Windows.Threading.DispatcherOperation.InvokeImpl()  at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) 
at System.Threading.ExecutionContext.runTryCode(Object userData) 
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Windows.Threading.DispatcherOperation.Invoke() 
at System.Windows.Threading.Dispatcher.ProcessQueue() 
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) 
at System.Windows.Threading.Dispatcher.Run() 
at System.Windows.Application.RunDispatcher(Object ignore) 
at System.Windows.Application.RunInternal(Window window) 
at System.Windows.Application.Run(Window window) 
at System.Windows.Application.Run() 
at FileDownloader.App.Main() in d:\mis documentos\visual studio 2010\Projects\OneMangaDownloader\FileDownloader\obj\x86\Debug\App.g.cs:line 0 
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ThreadHelper.ThreadStart() 
+0

请发布有关错误的更多详细信息(message,stacktrace,InnerException的详细信息...) – 2010-05-10 06:24:10

+0

添加了您请求的信息Thomas,thx的任何帮助 – 2010-05-10 11:38:18

回答

0

我知道有在Web客户端有一个错误:它总是把UI线程上的呼叫。不知道这是否导致问题。

For more info read this post

+0

我认为这是Windows Mobile的限制吗?也是6个连接限制。如果不...哇... – 2011-04-08 00:37:00