C#/WPF-I不能从后台工作站更新用户界面
我有一个代码,可以使用 tweetsharp 库从特定的Twitter帐户获取推文,创建自定义UserControl的实例,然后将Tweet Text发布到该UserControl,然后将其添加到a . 但是,我必须获得很多推文,似乎该应用程序在将用户控件添加到StackPanel>的同时冻结.我尝试使用BackgroundWorker,但直到现在我还不幸运. 我的代码: private readonly BackgroundWorker worker = new BackgroundWorker(); // This ( UserControl ) is used in the MainWindow.xaml private void UserControl_Loaded_1(object sender, RoutedEventArgs e) { worker.DoWork += worker_DoWork; worker.RunWorkerComp
0 2024-04-16
编程技术问答社区
如何检测我们是否在一个UI线程上?
为了参数,将UI线程视为已呼叫Application.Run()或其中一个过载的线程,并在其上调用了一个线程,并且运行了一个活动的消息循环. 是否有一种检测我们当前在此线程上执行的方法? 我想要的原因是因为我有一个长期运行的私人功能的课程.该类本身已经是多线程,并且该类的用法可以从UI或进行处理的背景线程中使用.此功能也属于此网.但是我不希望它阻止UI线程.因此,我想检测我是否在UI线程上运行,如果是,则将函数调用到背景线程中(可能ThreadPool,但这是本讨论的不问题).这完全是行为良好的,但是背景线程可能依赖于功能的输出,因此阻止它们更好,而UI线程则以更"设置和验证"的方式访问它. 解决方案 我建议这是呼叫者应做出的决定.您总是可以编写包装器方法以使其更容易 - 但这意味着您不会在呼叫者处于"奇怪"情况下遇到问题(例如,您不知道的UI框架,或其他具有事件循环的其他内容)而您为他们做出了错误的决定. 如果该方法需要在正确的线程中提供反馈,我将通过ISyn
0 2024-04-14
编程技术问答社区
我如何在UIThread上测试Prism事件聚合器的订阅?
我有一个类,可以通过Prisms事件聚合订阅事件. 由于在这里,我只是实例化了真实的,然后将其传递到正在测试的系统中. 在我的测试中,我然后通过该聚合器发布该事件,然后检查正在测试的系统如何对其做出反应.由于该事件将由Filesystemwatcher在生产过程中提出,因此我想通过在UITHREAD上订阅自动调度,因此我可以在升级事件后更新我的UI. > 问题是,在测试期间,除非我不在UITHREAD上订阅,否则该事件在系统测试中永远不会注意到. 我正在使用MSPEC进行测试,这是我通过TDD.NET内部从VS2008内部运行的. 将[RequiresSta]添加到我的测试课上没有帮助 有人有解决方案吗,可以使我免于在测试期间更改线程(例如,通过属性 - 多么丑陋的黑客)? 解决方案 如果同时嘲笑事件和事件聚合器,并使用MOQ的回调,则可以执行此操作. 这是一个示例: Mock mockEventAg
0 2024-04-14
编程技术问答社区
在WPF中渲染UIELEMENT期间等待屏幕
我使用Prism有一个WPF应用程序.我有一个登录屏幕,并且在包含带有许多项目的TileListView的新视图中成功登录.这需要超过10秒的渲染,因为控件必须计算大量等.所有这些都使用标准行为使用UI线程,因为WPF中的渲染是在UI线程中完成的.是否可以像旋转器这样的候补或单独的窗口中的简单动画或类似的东西显示?现在动画停止,在UI线程中呈现控件. 解决方案 您可以创建一个在单独线程中启动的新窗口.请参阅以下博客文章,以获取有关如何执行此操作的示例. 在单独的线程中启动WPF窗口: http://reedcopsey.com/2011/11/11/28/launching-aunching-a-wpf-wpf-window-in-a-a-a-separate-thread-part-part-part-part-part-1/ 然后,您只需启动此线程,该线程在您验证了凭据之后,就在重渲染即将开始之前. 这可能是您可以做的最好的事情,而且实施也应该很容易.
0 2024-04-14
编程技术问答社区
从一个异步回调方法与UI线程互动?
我有一种方法在 skDelegate = New AsyncCallback(AddressOf skDataReceived) skStream.BeginRead(skBuffer, 0, 100000, skDelegate, New Object) 在该回调方法中,我需要与UI线程进行交互. Sub skDataReceived(ByVal result As IAsyncResult) CType(My.Application.OpenForms.Item("frmMain"), frmMain).refreshStats(d1, d2) End Sub 这将在方法完成后导致例外. (执行End Sub时) 撤消操作遇到了 与什么不同的上下文 被应用于相应的集合 手术.可能的原因是 线程上设置了上下文, 未恢复(撤销). 那么如何与回调方法与UI线程进行交互?我在做什么错? 解决方案 您必须在frmmain对象上使用invoke或开始
0 2024-04-14
编程技术问答社区
WPF/C# 不要封锁用户界面
我有一个现有的WPF应用程序,该应用程序有多个部分.每个部分都是USERCORTROL,可以实现接口. 接口指定两种方法:void LoadData([...])和bool UnloadData(). 这些方法由UI线程调用,因此,如果耗时,我们需要在背景工作人员中进行工作. LoadData没有问题,因为我们可以异步更新UI.问题是unloaddata(). 如果我们真的可以离开当前视图,这应该返回. 这是用数据的当前状态(保存/修改/无效)计算的: 保存的返回true, 无效的问您是否要留下来保存一些 纠正数据或不保存而离开 修改后告诉你你可以 要么取消您的更改(返回true),要么继续 编辑(返回false),要么保存您当前数据(返回true) 问题在于"修改 - >保存".这是一种耗时的方法,因此为了尊重应用程序的理念,我们应该在背景线程(带有繁忙的指示器)中运行它. 但是,如果我们刚刚启动线程并转到下一节,它将返回" True
0 2024-04-14
编程技术问答社区
在Java/J2ME中与UI线程互动
我正在编写J2ME应用程序.其中一件是定期对目录内容进行轮询的内容,如果有任何新事物,请在屏幕上绘画.我通过让UI表单启动了一个用指针回到本身的轮询线程来完成此操作,并且当轮询线程找到某些东西回到表单并调用Syncrhonized方法以更新其显示时.这似乎很好. 我有这个问题.在c#/.网络中,我知道将非UI线程更新UI是不好的,而处理此问题的正确方法是将其委派给UI线程. 例如.以下内容: public void DoSomeUIThing() { if (this.uiComponent.InvokeRequired) { this.uiComponent.Invoke(someDelegateThatCallsBackToThis); } else { this.uiComponent.Text = "This is the update I want to happen"; } }
0 2024-04-13
编程技术问答社区
如何避免Winform服务总线消息接收器中的跨线程操作无效异常
已经开发了一个Azure Service Bus消息接收器控制台应用程序,该应用程序正常工作控制台应用程序的代码如下: using System.IO; using Microsoft.ServiceBus.Messaging; class Program { static void Main(string[] args) { const string connectionString = "Endpoint=sb://sbusnsXXXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=bkjk3Qo5QFoILlnay44ptlukJqncoRUaAfR+KtZp6Vo="; const string queueName = "bewtstest1"; var queueClient = Q
0 2024-04-12
编程技术问答社区
内联的javascript是否会阻塞UI线程?
我在外部脚本如何阻止UI线程,但我尚不清楚封锁是否实际上是由于标签的存在还是src='/myscript.js' src属性. 我的问题是inline javaScript(缺少SRC属性声明),例如: alert('am i blocking too?'); 或以下: var php=''; 还阻止UI线程? 解决方案 JS文件的任何加载或任何执行任何 js(无论是在外部文件还是在线中)都会阻止UI线程. 标签的例外是异步负载,脚本将在后台加载和执行异步. 也有"递延"负载(即defer属性),该载荷告诉浏览器在加载页面的其余部分之前不要实际执行其中的js. . 其他解决方案 web wor
0 2024-04-01
编程技术问答社区
当一个AsyncTask仍在运行时,当它的启动活动被停止/销毁时,它会发生什么?
我看过几乎几乎与我的问题相同,但是我找不到满足我所有疑问的完整答案. C0>类似的类: public class MyActivity extends Activity { private class DownloadImageTask extends AsyncTask { protected Bitmap doInBackground(String... urls) { return DownloadImage(urls[0]); } protected void onPostExecute(Bitmap result) { ImageView img = (ImageView) findViewById(R.id.img); img.setImageBitmap(result)
0 2024-03-27
编程技术问答社区
WP7|访问UI线程?
如何访问WP7应用程序的UI线程? 如果有帮助,我正在使用以下代码. private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) { AcquireNews(l => { listBox1.Items.Add(l[0]); }); // Here is where I get an exception saying "Invalid cross-thread access." } void AcquireNews(Action> callback) { var r = HttpWebRequest.Create("http://www.google.com") as HttpWebRequest; r.BeginGetResponse(result =>
2 2024-03-18
编程技术问答社区
循环浏览数组列表时在后台添加标记物
我从对象的ArrayList添加标记.大约有250个标记;我什至必须将它们转换为位图才能自定义它们.这是一项非常重要的资源密集型任务.但是它严重阻止了我的UI线程. 这是我的做法: final HashMap markerIdMap = new HashMap(); for (final NearLocation result : MainActivity.nearLocationList) { // Do all the hard work here } 在地图加载并在产生时填充它们后,我该如何以某种方式动态执行此操作?我不确定我是否可以通过在后台做一些工作来做到这一点,那么当标记完成后,将其移动到UI线程以添加. 我知道如何用AsyncTask单独执行此操作.不知道我正在循环... 据我所知, 解决方案 添加标记不能在
0 2024-03-04
编程技术问答社区
安卓ViewPager自动换页
我想安排一个操作以自动更改我的ViewPager页面. 我尝试了: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Override public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }, 100
6 2024-02-19
编程技术问答社区
更新时RecyclerView阻塞了ui线程
我的列表中有200多个项目.定期(每10秒)定期更新Recyclerview.在更新过程中,RecyClerview阻止UI线程几秒钟.我正在使用notifyDataSetChanged方法来刷新循环.还有另一种防止冰冻的方法吗?顺便说一句,我不想​​使用分页. 此方法每10秒运行一次: public void refreshAssetList(List newAssetList){ recyclerViewAdapter.setAssetList(newAssetList); recyclerViewAdapter.notifyDataSetChanged(); } recyClerviewAdapter类: public class AssetListRecyclerViewAdapter extends RecyclerView.Adapter
4 2024-02-17
编程技术问答社区
即使我正在创建一个新的ArrayAdapter,也需要清楚地说明。
您好,我遇到了了解阵列ADADAPTER的工作方式的问题.我的代码正在工作,但我不知道如何.图像/2013/code_meme.jpg ) 我有我的活动,里面有2个私人课程.: public class MainActivity extends Activity { ... private void SomePrivateMethod(){ autoCompleteTextView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, new ArrayList(Arrays.asList("")))); autoCompleteTextView.addTextChangedListener(new MyTextWatcher()); } ...
2 2024-02-13
编程技术问答社区
在AsyncTask期间更新UI
在完成任务完成之前,如何从异步箱中编辑活动的视图?我无法从Doinbackground方法访问任何视图,也不想等到任务完成.有没有办法做到这一点?还是我必须在doinbackground中创建一个线程(对我来说听起来很糟糕),然后访问该线程完成的视图? 解决方案 覆盖此方法: protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } 在异步的doInBackground()中称其为.此方法publishProgress(Progress... values) 从doInBackground()调用它时,会发生在UI线程上. 有关更多信息,请阅读 asynctask 其他解决方案 您需要在Asyntask类中覆盖此方法: @Override protected void onProgress
4 2024-02-13
编程技术问答社区
ASynchTask在做后台时睡觉,锁定UI线程
编辑:已解决.对不起,我想到,当我的数据加载发生在背景线程中时,解析数据的回调不是.数据的解析花了很长时间,这就是锁定我的线程的原因. 编辑:引起我的注意,我的总体问题(不再旋转的progressDialog)可能是由于我使用progressDialog而不是被阻止的UI线程引起的问题.如果是这样,我该如何解决? 编辑:要澄清,这不会永远锁定整个程序.一旦加载了所有内容,就会驳回进度对话框,并提出新活动.我的问题是,当它加载时,整个UI锁定(即ProgressDialog停止旋转) tl; dr:thread.sleep()在doinbackground()中锁定UI线程 我有一个应用程序,当特定活动打开时,就开始从后端加载许多数据,例如,大量与时间表有关的数据.此信息将不会立即使用,但是如果用户尝试访问它,则可以使用此信息(即单击时间表按钮并启动时间表活动). 如果用户在单击时间表按钮之前等待一点,则所有数据加载,时间表活动将打开并显示所有内容.我的问题是
2 2024-02-13
编程技术问答社区
调用AsynchTask.get()时,Android UI线程阻塞
我的活动是登录页面.当用户单击时,如果凭据很好,则在数据库中检查数据库.在任务期间,我想显示一个progressDialog,但是单击按钮后,它一直按下5秒钟,然后我的ProgressDialog Quiclky出现(少于1秒),然后出现吐司. 有我的单击功能: Button connect = (Button)findViewById(R.id.connectButton); final EditText loginED = (EditText) findViewById(R.id.login); final EditText passwordED = (EditText) findViewById(R.id.password); connect.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { String login =
6 2024-02-13
编程技术问答社区
了解UI线程
我是Android的初学者,我对Android UI Thread有一些困惑.现在,我知道除了创建UI的一个可以对其进行修改. 很棒. 这是我第一个Android应用程序中的Activity,这使我有些困惑. public class NasaDailyImage extends Activity{ public ProgressDialog modalDialog = null; //------------------------------------------------------------------------------ @Override protected void onCreate(Bundle savedInstanceState){ //Instantiate progress dialog, skipping details. Button b = //get reference t
2 2024-02-13
编程技术问答社区
为平行的小型已知冻结进程创建匿名的AsyncTask是一个好的做法吗?
例如:您要做的事情将需要几秒钟而不想冻结您的UI thr,对吗?您可以使用异步箱,但不想创建外部(或内部)类来解决一个小的冻结问题. 所以,一个好的普拉蒂斯会这样做吗? package com.example.stackoverflowsandbox; import android.os.AsyncTask; public class Foo { // E.g. before call foo method you change you Activity to loading state. private void foo() { new AsyncTask() { @Override protected Void doInBackground( final Void ... params ) { // something y
0 2024-02-13
编程技术问答社区