gpt4 book ai didi

c# - 在线程执行过程中更新UI C# android

转载 作者:行者123 更新时间:2023-12-01 13:42:57 25 4
gpt4 key购买 nike

我目前正在将 Android 应用程序的 Java 代码迁移到 C#。我想在线程执行过程中更新我的用户界面。

这是我的java代码:-

private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == MSG_SURFACE_CREATED) {
contentWidth = 0;
contentHeight = 0;
requestLayout();
return true;
} else {
Log.w("Unknown msg.what: " + msg.what);
}
return false;
}
});

并且:-

void postChangedToView(final int indexInAdapter) {
handler.post(new Runnable() {
@Override
public void run() {
changedToView(indexInAdapter, true);
}
});
}

我在 C# 中尝试过类似的方法:-

private Android.OS.Handler handler = new Android.OS.Handler();

private class Callback : Android.OS.Handler.ICallback //inner class
{

ViewController fp; //Create instance of outer class
public Callback(FViewController _fp) //pass the instance to constructor of inner class
{
fp = _fp;
}
#region ICallback implementation

public bool HandleMessage (Message msg)
{
if (msg.What == MSG_SURFACE_CREATED)
{
contentWidth = 0;
contentHeight = 0;

fp.RequestLayout ();

return true;
}
else
{
Log.w("Unknown msg.what: " + msg.What);
}
return false;
throw new NotImplementedException ();
}
}

这里我无法创建 Handler.ICallBack 的内联类

并且:-

internal virtual void postChangedToView(int indexInAdapter) {
handler.Post (Task.Run (()=> flippedToView (indexInAdapter,true)));
}

这里我收到一个错误:-

Error CS1503: Argument 1: cannot convert from 'System.Threading.Tasks.Task' to 'System.Action' 

最佳答案

Handler.Post 需要 System.Action 参数。您可以创建System.Action,如下所示:

internal virtual void postFlippedToView(int indexInAdapter)
{
Action action = () => flippedToView(indexInAdapter, true);
handler.Post (action );
}

关于c# - 在线程执行过程中更新UI C# android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20560281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com