下面代码可以运行,但不是异步运行。为什么?

ytredear 2020-04-24 12:14:13
 Private Sub BtnTcpTestYaxin_Click(sender As Object, e As RoutedEventArgs) Handles btnTcpTestYaxin.Click
Me.btnTcpTestYaxin.Dispatcher.BeginInvoke(New Action(Sub()
'Thread.Sleep(TimeSpan.FromSeconds(3))
Debug.Print("ddddddddddddddddddddddddddddd")
Dim uri200 As System.Uri = New Uri(MySettings.Default.UrlYaxin200)
Dim uri250 As System.Uri = New Uri(MySettings.Default.UrlYaxin250)
Debug.Print(uri250.Host & "...." & uri250.Port)
Dim ok250 As String = IIf(TcpBase.TcpConnect(uri250.Host, uri250.Port), "250ok", "250no")
Dim ok200 As String = IIf(TcpBase.TcpConnect(uri200.Host, uri200.Port), "200ok", "200no")
btnTcpTestYaxin.Content = ok250 & vbCrLf & ok200
End Sub))

End Sub
...全文
153 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
从你的代码猜测,你使用了一个根本不支持异步线程的组件,那么即使你在子线程去调用它,而它卡死——等待主线程执行完毕——才继续运行,这就是多余的。

因此在异步多线程编程中,不能调用阻塞语句。一旦里边去调用阻塞语句就等于“脱裤子放屁”一样地把自己给玩儿坏了。
ytredear 2020-04-26
  • 打赏
  • 举报
回复
测试过新线程,但是新线程无法回调。像WINFORM那样。正在郁闷中
ytredear 2020-04-26
  • 打赏
  • 举报
回复
引用 5 楼 OrdinaryCoder的回复:
begininvoke和invoke都是发送委托给主线程,只不过一个发过去之后 等主线程有空了再干 一个是发过去直接就干吧
问题是两个都使窗口卡住了
良朋 2020-04-26
  • 打赏
  • 举报
回复
引用 4 楼 ytredear 的回复:
[quote=引用 1 楼 良朋的回复:]委托还是占主线程的。
debug发现thread.currentthread和dispatcher确实是一个进程。纳闷了,begininvoke和invoke是不一样的啊[/quote] 别用委托,开新线程啊。
ytredear 2020-04-26
  • 打赏
  • 举报
回复
哦。WPF修改UI,最流行的方法是什么?是控件数据绑定吗?
OrdinaryCoder 2020-04-26
  • 打赏
  • 举报
回复
begininvoke和invoke都是发送委托给主线程,只不过一个发过去之后 等主线程有空了再干 一个是发过去直接就干吧
ytredear 2020-04-25
  • 打赏
  • 举报
回复
引用 1 楼 良朋的回复:
委托还是占主线程的。
debug发现thread.currentthread和dispatcher确实是一个进程。纳闷了,begininvoke和invoke是不一样的啊
ytredear 2020-04-25
  • 打赏
  • 举报
回复
WINFORM在异步运行后,me.invoke调用另一个程序修改UI属性。初次编写WPF异步,不太明白
ytredear 2020-04-25
  • 打赏
  • 举报
回复
麻烦给提个建议
良朋 2020-04-25
  • 打赏
  • 举报
回复
委托还是占主线程的。

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧