vb.net多线程更新ui问题

问题描述

我百度了下,关于这方面的知识很少,特来请教csdn的各位大牛多线程post请求多个不同网页,然后返回其页面的源码,我的代码如下。遇到的问题:我加入多线程不行。。。不知道是不是我的代码错了ImportsSystemImportsSystem.IOImportsSystem.NetImportsSystem.TextImportsSystem.ThreadingPublicClassForm1DimiAsStringDimiiAsStringDimtAsThreadPrivateDelegateSubvoiddelegate(ByRefiAsString,ByRefiiAsString)PrivateSubForm1_Load(senderAsObject,eAsSystem.EventArgs)HandlesMe.Loadi="http://www.baidu.com"'这个是目标地址ii="xxx"'xxx是用户名和密码EndSubPrivateSubButton1_Click(senderAsSystem.Object,eAsSystem.EventArgs)HandlesButton1.Clickt=NewThread(AddressOftest)t.Start()EndSubPrivateSubupdateui(ByRefiAsString,ByRefiiAsString)Me.TextBox1.Text=postHtml(i,ii)EndSubPrivateSubtest()Me.Invoke(Newvoiddelegate(AddressOfupdateui),i,ii)t.Abort()EndSubFunctionpostHtml(ByRefhtmlUrlAsString,ByRefhtmlDateAsString)'这个是post请求函数DimrequestAsHttpWebRequest=WebRequest.Create(htmlUrl)DimfanhuiAsString'SettheMethodpropertyoftherequesttoPOST.request.Method="POST"'CreatePOSTdataandconvertittoabytearray.DimpostDataAsString=htmlUrlDimbyteArrayAsByte()=Encoding.UTF8.GetBytes(htmlDate)'SettheContentTypepropertyoftheWebRequest.request.ContentType="application/x-www-form-urlencoded"'SettheContentLengthpropertyoftheWebRequest.request.ContentLength=byteArray.Length'Gettherequeststream.DimdataStreamAsStream=request.GetRequestStream()'Writethedatatotherequeststream.dataStream.Write(byteArray,0,byteArray.Length)'ClosetheStreamobject.dataStream.Close()'Gettheresponse.DimresponseAsWebResponse=request.GetResponse()'Displaythestatus.'TextBox1.Text=(CType(response,HttpWebResponse).StatusDescription)'Getthestreamcontainingcontentreturnedbytheserver.dataStream=response.GetResponseStream()'OpenthestreamusingaStreamReaderforeasyaccess.DimreaderAsNewStreamReader(dataStream)'Readthecontent.DimresponseFromServerAsString=reader.ReadToEnd()'Displaythecontent.fanhui=(responseFromServer)Returnfanhui'Cleanupthestreams.Console.ReadLine()reader.Close()dataStream.Close()response.Close()EndFunctionEndClass'

再附上代码高清图

解决方案

解决方案二:
UI控件(Me.TextBox1.Text)不是线程安全的。参考
解决方案三:
要委托PrivateSubupdateui(ByRefiAsString,ByRefiiAsString)Me.TextBox1.Text=postHtml(i,ii)EndSubPrivateSubtest()DimwtAsNewMethodInvoker(AddressOfupdateui,i,ii)BeginInvoke(wt)EndSub
解决方案四:
两个办法,1.不让VB检查线程的安全性form_load加入Control.CheckForIllegalCrossThreadCalls=false2.用invoke委托,这是标准方法

时间: 2024-09-28 11:36:31

vb.net多线程更新ui问题的相关文章

拒绝卡顿——在WPF中使用多线程更新UI

原文:拒绝卡顿--在WPF中使用多线程更新UI 有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例:     public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            this.Dispatcher.Invoke(new Action(()=> { }));

android使用多线程更新ui示例分享_Android

Android线程涉及的技术有:Handler;Message;MessageQueue;Looper;HandlerThread. 下面看一段在线程中更新UI的代码: 复制代码 代码如下: public class MainActivity extends Activity {private TextView timeLable;private Button stopBtn;private Thread mThread;private boolean isRunning = true;priv

android中子线程更新UI的方式

一.为何写作此文 你是不是经常看到很多书籍中说:不能在子线程中操作ui,不然会报错.你是不是也遇到了如下的疑惑(见下面的代码): (Bundle savedInstanceState) { .onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Thread.currentThread().setName(); LooperThrea

C# 后台线程更新UI控件

/********************************************************************************* * C# 后台线程更新UI控件 * 说明: * C#多线程更新UI控件的方法,每次都要找,记录一下,方便检索. * * 2017-10-23 深圳 南山平山村 曾剑锋 ********************************************************************************/ 一

Android 更新UI的方法汇总_Android

1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); andro

Android 更新UI的几种方式

1.Activity的 runOnUiThread    textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); an

Android 更新UI的方法汇总

1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); andro

c#异步读取数据库与异步更新ui的代码实现

 这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧 异步读取数据库,在数据绑定的时候会出现点问题,就是窗体界面会无法关闭,要结束任务才能结束进程.例如下面代码   首先按习惯的方法,设定线程更新UI   a2.CheckForIllegalCrossThreadCalls = false;  //a2为窗体名称   下面的代码就是从数据库里取得数据并绑定     代码如下: private void button1_Click(object sender, Event

android 下载 跨界面更新UI

问题描述 android 下载 跨界面更新UI 项目遇到问题,在一个activity中点击下载一堆文件,然后需要在另一个activity中的fragment中的listview中更新正在下载的item的进度. 我是使用广播加异步更新.但总觉得效率有点慢.有更好的方法吗?