我想构建一个共享库.要构建它,我需要调用另一个共享库.这是我做的:
1.创建一个名为"BuildLib"的Android项目,并在项目目录下添加一个新文件夹"jni".jni文件夹的内容:
jni - > Android.mk
- > Application.mk
- > add.cpp
- > add.h add.cpp只做两个数字加法:
add.h:
int add(int a,int b);
add.cpp:
Run Code Online (Sandbox Code Playgroud)#include "add.h" int add(int a,int b){ return a+b;}
Android.mk:
Run Code Online (Sandbox Code Playgroud)LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := add.cpp LOCAL_MODULE := add include $(BUILD_SHARED_LIBRARY)
构建项目后,我在目录下获得了libadd.so $(BUILDLIB)/libs/armeabi/.
创建另一个名为"CallLib"的Android项目.复制libadd.so和add.h对JNI文件夹,创建Android.mk,Application.mk和call_add.cpp.
Android.mk:
Run Code Online (Sandbox Code Playgroud)LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := libadd.so LOCAL_MODULE := add_prebuilt include $(PREBUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(LOCAL_PATH? LOCAL_SRC_FILES …
我正在使用BackgroundWorker定期检查硬件开关.由于它通过慢速RS485网络连接,我必须延迟下一次状态更新.在开关状态更改时,我想更新OK/nOK图片框.这是在nOK pictureBox上实现的绿色OK图片框.这里没有真正的工作.
为了扩展性,我决定使用Backgroundworker.最后我想要一个隐藏的工人,这个
问题描述 启动BackgroundWorker后,它会按预期工作.然而,GUI冻结了.
我尝试了什么? 在MSDN的BackgroundWorker类注1 表示,该GUI应通过ProgressChanged更新.我尝试通过Worker_Switch.ReportProgress(fakeProgress ++)引发此事件并失败.PictureBox不再更新.
来自设计师的片段
this.Worker_Switch = new System.ComponentModel.BackgroundWorker();
//
// Worker_Switch
//
this.Worker_Switch.WorkerSupportsCancellation = true;
this.Worker_Switch.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Worker_Switch_DoWork);
Run Code Online (Sandbox Code Playgroud)
主表格的片段
delegate void SetEventCallback(object sender, DoWorkEventArgs e); // Threadsafe calls for DoWork
private void btnBackgroundworker_Click(object sender, EventArgs e)
{
if (!Worker_Switch.IsBusy)
{
Worker_Switch.RunWorkerAsync();
}
}
private void Worker_Switch_DoWork(object sender, DoWorkEventArgs e)
{
// Worker Thread has no permission to change PictureBox "pictureBoxSwitchrightOK"
// Therefore this method calls itsself in the MainThread, …Run Code Online (Sandbox Code Playgroud)