读书人

MONO 中线程操作UI,该怎么处理

发布时间: 2013-09-05 16:02:07 作者: rapoo

MONO 中线程操作UI
MONO 调用一个线程操作UI 然后报Only the original thread that created a view hierarchy can touch its views。错误 google了一下说UI的操作还是需要到主线程,看了些java的例子 但是在MONO中需要怎么实现 多谢各位了

这是一个java的解决方案 在Mono中Handler大概需要怎么实现


public class MasterActivity extends Activity {
TextView tv = null;
Button btn = null;

Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 1) {
tv.setText("update UI is success!");
btn.setText("update UI is success!");
}
super.handleMessage(msg);
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println(Thread.currentThread().getName() + ": " + Thread.currentThread().getId());
tv = (TextView)findViewById(R.id.text);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {



@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": " + Thread.currentThread().getId());
Message msg = mHandler.obtainMessage();
msg.what = 1;
msg.sendToTarget();
}});
thread.start();
}
});
}

mono 线程 java
[解决办法]
LZ搜一下BeginInvoke这个关键字。
[解决办法]
引用:
Quote: 引用:

LZ搜一下BeginInvoke这个关键字。


我已经试过了,不是线程异步调用的问题 是MONO操作UI还是要回到主线程里面来 子线程是不行的

Mono不可以用委托回调么?
[解决办法]
用vs2012写了个程序,代码很简单,就是写5个数,编译后拖入ubuntu系统,运行很正常


private void button1_Click(object sender, EventArgs e)


{
new Thread(() =>
{
for (int i = 0; i < 5; i++)
{
Invoke((MethodInvoker)(() => { richTextBox1.Text += i.ToString() + Environment.NewLine; }));
Thread.Sleep(1000);
}
}).Start();
}


MONO 中线程操作UI,该怎么处理

读书人网 >C#

热点推荐